我尝试在C中按位操作。这是我的代码:
int main() {
char c = 127;
c <<= 1;
if (c == 0xfe) {
printf("yes");
}
else {
printf("No");
}
return 0;
}
系统控制台打印否。我希望收到的是是。位移后c中的值为ffffffffe。似乎系统已经将8位改为32位。谁能帮我。
你已经正确地找出了低位字节的内容,即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
的行为是实现定义的。