[英]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.