繁体   English   中英

与C〜运算符(按位非)混淆并比较char变量

[英]Confusion with C ~ operator (bitwise Not) and comparing char variables

我希望使用“普通C”比较两个8位字节,以确定第二个是否是第一个的按位补码。 例如,如果Byte1是二进制00001111(十进制为15),我想测试Byte2是否是二进制11110000(十进制为240)。 我希望使用无符号字符表示字节,C按位NOT运算符“〜”和简单的if(==)测试来完成此操作。

谁能为我解释以下代码为何不起作用(即,我希望它输出“ True”,但实际上输出“ False”)。

unsigned char X = 15;
unsigned char Y = 240;  

if( Y == ~X)
    printf("True");
else
    printf("False");

我猜我可以对字节进行异或运算,然后测试255,但是为什么上面的if(==)比较不起作用?

谢谢,

马丁

因为整数提升使右边的数学做为int 如果将结果分配回给像unsigned char Z = ~X char这样的unsigned char Z = ~X这些高位将再次被截断,并且Y == Z

〜运算符使它的操作数在补码之前提升为int。 〜15不是240,而是其他一些值,具体取决于int的大小。

只需使用if (X + Y == 255) ,它就可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM