我猜输出应该是“0000”但它的ffff不是~ffff-> 0000 0000 0000 0000
#include<stdio.h>
int main()
{
unsigned int a=0xffff;
~a;
printf("%x\n", a);
return 0;
}
答案 0 :(得分:15)
您需要将值分配回a
:
a = ~a;
即便如此,由于数据类型的大小,输出值可能如下所示:
ffff0000
要使其按预期工作(全0),请将a
的初始值设置为UINT_MAX
(来自limits.h
)。这样做会将所有位设置为1
。
答案 1 :(得分:7)
写~a;
无效。它是一个返回a
补码的表达式,但不会更改a
本身。
您想要a = ~a;
。
答案 2 :(得分:5)
蒂姆和弗拉德说,你没有做任何关于逐位反转的事情。
即使您将代码更改为a = ~a;
,也可能不会为零。那是因为如果unsigned int
超过16位,你将有前导零,它在反转后变为1。
所以我希望你的输出是
FFFF0000
甚至
FFFFFFFFFFFF0000
如果需要16位按位运算,可以使用
#include <inttypes.h>
uint16_t a;
答案 3 :(得分:3)
因为您没有将值分配给a。你需要一个= ~a;
答案 4 :(得分:1)
~a
本身是一个返回a
的按位补码的语句。你可以指定一个~a
(如@timcooper建议的那样),或者你可以
printf("%xn", ~a);
答案 5 :(得分:1)
正如其他人已经说过的那样,您需要将值重新分配到a = ~a;
或使用printf("%x\n",~a);
直接打印结果,但在任何一种情况下,您仍然不会得到零作为你期待。
〜运算符将翻转变量中的所有位。由于您最有可能处理32位整数,因此最终将使用0xFFFF0000
,因为那些高16位将从零翻转为1。
答案 6 :(得分:0)
#include<stdio.h>
int main()
{
unsigned short int a= 0xffff;
a=~a;
printf("%x\n", a);
return 0;
}