不是十六进制值0xffff?

Dor*_*jay 3 c c++ hex objective-c-category

我猜输出应该是"0000"但它的ffff不是~ffff-> 0000 0000 0000 0000

#include<stdio.h>
int main()
{
    unsigned int a=0xffff;
    ~a;
    printf("%x\n", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*per 15

您需要将值分配回a:

a = ~a;
Run Code Online (Sandbox Code Playgroud)

即使这样,由于数据类型的大小,输出值可能如下所示:

ffff0000
Run Code Online (Sandbox Code Playgroud)

要使其按预期工作(全0),请将初始值设置aUINT_MAX(从limits.h).这样做会将所有位设置为1.


Vla*_*lad 7

写作~a;没有效果.它是一个返回补充a但不会改变a自身的表达式.

你想要的a = ~a;.


Ben*_*igt 5

正如蒂姆和弗拉德所说的那样,你没有做任何有关逐位反转的事情.

即使您将代码更改为a = ~a;,也可能不会为零.那是因为如果unsigned int有超过16位,你将有前导零,它在反转后变为1.

所以我希望你的输出是

FFFF0000

甚至

FFFFFFFFFFFF0000

如果您想要16位按位运算,则可以使用

#include <inttypes.h>
uint16_t a;
Run Code Online (Sandbox Code Playgroud)