C语言,按位取反的时候怎么运算的!为什么~1的运算结果是﹣2

如题所述

因为1的二进制表示是
0000 0000 0000 0000 0000 0000 0000 0001
按位取反之后为
1111 1111 1111 1111 1111 1111 1111 1110
有符号的数最高位为1表示负数
负数的补码是其原码取反加1
取补码:1000 0000 0000 0000 0000 0000 0000 0010
结果为-2
-2的二进制为2的反码取补码:
原码:0000 0000 0000 0000 0000 0000 0000 0010
反码:1111 1111 1111 1111 1111 1111 1111 1101
补码:1111 1111 1111 1111 1111 1111 1111 1110
所以 ~1 的运算结果为-2
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-18
1的二进制表示是0000 0000 0000 0001,用~取反就是1111 1111 1111 1110 这个是补码,因为在位运算符中出现的数都是以二进制补码形式出现,你可以去翻书看看。补码=反码+1.
所以将这个数减去1,再取反转换成原码(取反除符号位):即是1000 0000 0000 0010
所以~1的结果等于 -2
相似回答