C/C++ 中的一些实用小技巧

C语言

1.取符号位

取double的符号位:

    double x;scanf("%lf",&x);
    int fx=((signed char*)&x)[7]>>7|1;
View Code

signed char*     -有符号数 有符号数右移时,为算术右移,即原来的最高位为1,则右移时补1;原来的最高位为0,则右移时补0。

最后如果为正数,则fx=1; 如果为负数,fx=-1;

 

注意,使用时应该不可以写成函数的形式(会用到取地址操作)

所以写成宏定义(注意空格):

#define getsign(x) (((signed char*)&x)[7]>>7|1)
View Code

 

2.看内存中数据的存储方式

eg:用十六进制形式输出 十进制双精度实数的64位机内码

#include<stdio.h>

int main(){
    double i;scanf("%lf",&i);
    unsigned char *p=(unsigned char *)(&i);
    for(int i=7;i>=0;--i) printf("%02X",*(p+i));
    return 0;
}
View Code

 

posted @ 2020-09-25 09:18  YWQQwQ  阅读(129)  评论(0)    收藏  举报