%x和〜的重要性

Bri*_*Roy 9 c printf

int m=32
printf("%x" , ~m);
Run Code Online (Sandbox Code Playgroud)

此语句的输出是ffdf和没有~输出的20.什么是意义%x~

Pab*_*ruz 22

~操作是按位否定.它将打印出按位否定m的值.%x意味着printf将以十六进制格式输出其值.

所以,价值0xffdf是价值的否定0x20(32).

值32(int位):

0000 0000 0010 0000
Run Code Online (Sandbox Code Playgroud)

它的逐位否定将是:

1111 1111 1101 1111
Run Code Online (Sandbox Code Playgroud)

这是有道理的:

1111 1111 = 0xff
Run Code Online (Sandbox Code Playgroud)

和:

1101 1111 = 0xdf
Run Code Online (Sandbox Code Playgroud)


Edw*_*son 7

%xprintf格式,指示int值应以十六进制显示.

~位NOT,它翻转所有位整数.

该声明:

printf("%x", m);
Run Code Online (Sandbox Code Playgroud)

将输出显示200x20= decimal 32.

该声明:

printf("%x", ~m);
Run Code Online (Sandbox Code Playgroud)

将显示输出ffdf0xffdf是的按位反向0x20.

可视化二进制中的按位否定可能更有意义:

Base 10:         32                  65503
Base 16:        0x20                0xFFDF
Base 2:    0000000000100000    1111111111011111
Run Code Online (Sandbox Code Playgroud)