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)
该%x是printf格式,指示int值应以十六进制显示.
该~是位NOT,它翻转所有位整数.
该声明:
printf("%x", m);
Run Code Online (Sandbox Code Playgroud)
将输出显示20为0x20= decimal 32.
该声明:
printf("%x", ~m);
Run Code Online (Sandbox Code Playgroud)
将显示输出ffdf为0xffdf是的按位反向0x20.
可视化二进制中的按位否定可能更有意义:
Base 10: 32 65503
Base 16: 0x20 0xFFDF
Base 2: 0000000000100000 1111111111011111
Run Code Online (Sandbox Code Playgroud)