我无法理解为什么它的输出是ffff它应该是0000.假设int取2字节ffff将存储在内存中:1111 1111 1111 1111
所以在〜之后一个值将变为:0000 0000 0000 0000.但是我想错了一些概念吗?
#include <stdio.h>
void main()
{
unsigned int a = 0xffff;
~a;
printf("%x", a);
}
输出:ffff
答案 0 :(得分:5)
你应该做
a = ~a;
将否定值分配给 a 。
或者如果您只想打印它,请执行
printf("%x", ~a);
答案 1 :(得分:2)
~
运算符不会更改变量,它会返回更改的结果。因此,为了对变量执行逐位否定,您需要将其分配给自身:
a = ~a;
答案 2 :(得分:1)
如何保存操作的值:
a = ~a;
您确实执行了按位~
操作,但未将返回值分配给任何变量
此运算符返回值,而不会自行修改变量。
答案 3 :(得分:1)
您必须将值分配回变量。你正在做~~您没有将其分配回。
a = ~a;
会给你正确的输出。
答案 4 :(得分:0)
声明
~a;
~
运算符NOT(补码)a
的值,其值被丢弃(与一元运算符++
和--
不同),即{{1}除非您将其分配给~a
a
不执行任何操作
a