位运算
#include<stdio.h>main()
{
char a=0x95,b,c;
b=(a & 0x0f)<<4;
c=(a & 0xf0)>>4;
a=b | c;
printf("a=%d",a);
}(vc6.0)
为什么结果是89
蓝色标记0x95的十进制是149,超过了char的范围127,怎么办啊,
红色标记有符号位右移,应该是补符号位的吧
位操作的时候,你可以把char看成unsigned char类型,因为在位级别上,有符号数和无符号数的运算是一样的。 有符号和无符号在位级别运算怎么可能会一样啊,例如向右移位的时候有符号就补符号位的 ?? 对于位移是不存在超出范围的,只是解释它的时候可能会有溢出的逻辑错误
C语言标准左移是低位补0,但是对于右移并没有明确定义应该使用哪种类型(算术或逻辑)的右移。 右移位运算时对于无符号数来运算总是高位补0,而有符号数有可能补充的是符号位.也有可能补充的是0.是没有规定的,编译器处理可能不同 感谢上面的回答,谢谢。可不可以在讲的细致一点(只是解释它的时候可能会有溢出的逻辑错误)是什么意思
页:
[1]