C/C++ 中的一些实用小技巧
C语言
1.取符号位
取double的符号位:
double x;scanf("%lf",&x); int fx=((signed char*)&x)[7]>>7|1;
signed char* -有符号数 有符号数右移时,为算术右移,即原来的最高位为1,则右移时补1;原来的最高位为0,则右移时补0。
最后如果为正数,则fx=1; 如果为负数,fx=-1;
注意,使用时应该不可以写成函数的形式(会用到取地址操作)
所以写成宏定义(注意空格):
#define getsign(x) (((signed char*)&x)[7]>>7|1)
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; }

浙公网安备 33010602011771号