方法1:
int int_shifts_are_logical(void)
{
int i = -1;
i >>= 4;
char *p = (char *)&i;
return -(*p);
}
方法2:
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个字节的最低位,从而可以进行判断。