我尝试在C中按位操作。这是我的代码:
int main() {
char c = 127;
c <<= 1;
if (c == 0xfe) {
printf("yes");
}
else {
printf("No");
}
return 0;
}
系统控制台打印编号 我期望收到的是是的。 位移后c中的值为ffffffffe。 似乎系统已经将8位改为32位。任何人都可以帮助我。
答案 0 :(得分:7)
您已正确找出低位字节的内容,即0xfe
。但是,这里还有更多内容:当你写作时
if (c == 0xfe) {
...
}
您要将c
,char
与int
常量0xfe
进行比较。在这种情况下,C规则要求推广 char c
到int
进行比较。由于char
已在您的平台上签名,0xfe
会升级为0xfffffffe
,这就是比较随后失败的原因。
如果您想在char
类型中进行比较,请将0xfe
投射到char
,如下所示:
if (c == (char)0xfe) {
...
}
另一方面,无符号字符可以帮助您int
促销,因为它们非常适合int
:
unsigned char c = 127;
c<<=1;
if (c == 0xfe) { // No casting is necessary
...
}
注意:由于c <<= 1
溢出,char
的行为是实现定义的。