您的位置:首页 > 其它

习题(移位运算)

2011-04-13 20:34 435 查看
编写一个函数 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个字节的最低位,从而可以进行判断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: