此问题在此处已有答案:
What does tilde(~) operator do?(3个答案)
7小时前关闭。
浏览K&R C编程书的Excercise2.1。我试着查找它,但解释有点高。那么“~"是什么?为什么printf("%u", (unsigned char)~0);
打印255
和printf("%u\n", ~0);
打印4294967295
?
谢谢你:)
此问题在此处已有答案:
What does tilde(~) operator do?(3个答案)
7小时前关闭。
浏览K&R C编程书的Excercise2.1。我试着查找它,但解释有点高。那么“~"是什么?为什么printf("%u", (unsigned char)~0);
打印255
和printf("%u\n", ~0);
打印4294967295
?
谢谢你:)
2条答案
按热度按时间tp5buhyn1#
What does tilde(~) operator do?
这是一个按位的not,意味着所有的位都被翻转。
对于第一个示例,
~
运算符将整数0中的所有32位求反(存储为40x00000000
字节),将其转换为全1(四个0x11111111
字节)。然后将其转换为无符号字符,将其截断为一个0x11111111
字节。在十进制中,0x11111111
为255。对于第二个示例,由~0
产生的四个0x11111111
字节被解释为无符号int,其在十进制中等于4294967295。2nc8po8w2#
首先你应该知道'~'字符是按位的NOT
让我们看看使用按位not时会发生什么
以二进制格式
或者另一个例子
因此,我们了解到按位NOT反转变量中每一位,无论哪一位是0或1,都将反转
现在,如果我们对较大的变量使用按位NOT,会发生什么情况
二进制:
因此,现在您可以确定按位NOT不关心变量值和变量大小,它只是反转变量中的所有位,即使您有一个64位的变量