习题(移位运算)

编写一个函数 int_shifts_are_arithmetic(), 若机器对int使用算术右移,返回1.否则返回0.

 

 int int_shifts_are_arithmetic() { int shift_val = (sizeof(int)-1)<<3; int xright = (-1)>>shift_val; return ((xright & 0x10)==0x10); }

 

说明:(sizeof(int))<<3 可求出机器中int类型的位数.算法中求出:把-1右移(sizeof(int)-1)<<3位。即把-1的最高有效字节移到最右端。因为-1<0,则其余位填充0(若逻辑右移)或1(若算术右移)。把结果和0x10进行与运算,可提取出从右往左数第2个字节的最低位,从而可以进行判断。

你可能感兴趣的:(算法)