首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按位NOT运算符的解释

按位NOT运算符的解释
EN

Stack Overflow用户
提问于 2010-11-28 13:41:46
回答 5查看 37.4K关注 0票数 25

为什么按位NOT运算符(大多数语言中的~)会这样转换以下值:

-2 -> 1

-1 -> 0

0 -> -1

1 -> -2

是否应该将-2转换为2,将1转换为-1,等等?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-28 13:44:18

有关负整数在许多语言中的表示,请参阅two's complement。正如您所看到的,-2由1111110表示;如果您反转所有这些位,您将得到0000001,即值1。

票数 32
EN

Stack Overflow用户

发布于 2010-11-28 13:46:45

如果你以二进制的形式来看它,它会有所帮助。

首先,正如您所知道的,负数表示为(最大可能的无符号数加上1减去的值)。因此,在16位整数中,具有最高无符号值65535的-1将是65536-1=65535,即十六进制的0xffff或二进制的1111 1111 1111 1111

所以:

二进制形式的1= 0000 0000 0000 0001

不是在所有位上都会导致1111 1111 1111 1110。用十进制数表示是65534。65536减65534等于2,所以这是-2。

票数 15
EN

Stack Overflow用户

发布于 2010-11-29 05:03:43

Dim mask As Integer = -1
'11111111111111111111111111111111

For x As Integer = -3 To 3
    Dim i As Integer = x
    Debug.WriteLine("")
    Debug.WriteLine("'" & Convert.ToString(i, 2).PadLeft(32, "0"c) & " > Num = " & i.ToString)

    i = i Xor mask 'reverse the bits (same as Not)
    Debug.WriteLine("'" & Convert.ToString(i, 2).PadLeft(32, "0"c) & " > Not = " & i.ToString)

    i += 1 'convert to two's complement
    Debug.WriteLine("'" & Convert.ToString(i, 2).PadLeft(32, "0"c) & " > 2's Comp = " & i.ToString)
Next

'debug results

'11111111111111111111111111111101 > Num = -3
'00000000000000000000000000000010 > Not = 2
'00000000000000000000000000000011 > 2's Comp = 3

'11111111111111111111111111111110 > Num = -2
'00000000000000000000000000000001 > Not = 1
'00000000000000000000000000000010 > 2's Comp = 2

'11111111111111111111111111111111 > Num = -1
'00000000000000000000000000000000 > Not = 0
'00000000000000000000000000000001 > 2's Comp = 1

'00000000000000000000000000000000 > Num = 0
'11111111111111111111111111111111 > Not = -1
'00000000000000000000000000000000 > 2's Comp = 0

'00000000000000000000000000000001 > Num = 1
'11111111111111111111111111111110 > Not = -2
'11111111111111111111111111111111 > 2's Comp = -1

'00000000000000000000000000000010 > Num = 2
'11111111111111111111111111111101 > Not = -3
'11111111111111111111111111111110 > 2's Comp = -2

'00000000000000000000000000000011 > Num = 3
'11111111111111111111111111111100 > Not = -4
'11111111111111111111111111111101 > 2's Comp = -3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4295578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档