我执行了此(~(1 << 3))
声明,结果我得到了-9
。
声明:(~(1 << 3))
结果:-9
答案 0 :(得分:4)
计算机中的数字存储在2's complement form。
原始数字为1,二进制为0...0001
。我正在跳过第4到第30位,因为它们都将为零(考虑32位系统)。
执行1 << 3
会产生0...1000
,即+8。简单来说,它意味着将{1}乘以2^i
,其中i = 3
。
现在,反转这会产生1111 1111 1111 1111 1111 1111 1111 1000
,这是2的补码形式的负数。
要获取数字的值,请删除前1(符号位),再次反转整个数字并添加1.
因此,再次反转会给你0...1000
。向此添加1,因此0...1001
。
这是数字的值为9.并且符号为负,因为第一个符号位为1.
答案 1 :(得分:2)
<<
是left-shift
运算符,简单来说,当应用于数字时,将其乘以2^i
,其中i
是要添加的位数转移,例如:
1 << 3 = 8 (multiply 1 by 2^3)
2 << 4 = 32 (multiply 2 by 2^4)
和~
是NOT
运算符,它将数字中的每个位取出并切换它。简单来说,~x = -x - 1
例如:
~100102 = 011012
~8 = -9
现在回答你的问题(~(1 << 3)) = (~8) = -9
。有关详情,请查看以下答案:NOT(~) vs NEGATION(!)。