Python反转运算符 - 可视化负数

时间:2014-03-06 09:09:55

标签: python invert

简单来说,~n给出的定义是-n-1。

例如~1

 1 = 0001
~1 = 1110 (which is -2) 

偶数

说~2

 2 = 0010
~2 = 1101 (which is the representation of -3 in twos complement)

但问题是

1110 = -2 can be easily visualized as -2 (the right two bits are 10 and the rest all 1)
1101 = -3 can't be visualized like this (going by the above logic it should be -5)

所以我想知道是否有一种简单的方法可以从二进制补码二进制中看出并判断负数表示什么,而无需进行太多计算。

2 个答案:

答案 0 :(得分:3)

~n = -n - 1相当于-n = ~n + 1。这意味着要弄清楚数字的负数是什么,你可以将它反转(在你的头脑中)并添加一个。假装零是1,反之亦然,然后添加一个。

示例:假装此

1101

是这个

0010

然后加1

0011

因此,1101代表-3

答案 1 :(得分:0)

定义是因为2的整数补码表示。所以“真的”~nn,所有位都被翻转。但是,翻转“全部”位的结果在某种意义上取决于n的位数。 CPython在内部使用固定宽度的整数,但语言不会将它们呈现给程序员,因此唯一有意义的概括定义是算术~n = -n - 1。但是这个定义的动机是翻转固定宽度2的补码整数。

  

1110 = ~2可以很容易地显示为-2

...1110不是~2,而是-2~2...1101,因为2...010

  

1101 = ~3无法像这样显示

...1101不是~3,而是-3~3...1100,因为3...011

我想象这一点的方式(当我想象它时 - 作为训练的数学家,我宁愿不考虑具体数字),就是要知道在2的补语中,...10...总是被否定的力量二。因此...10为-2,...100为-4,等等。

然后,为了知道例如...110110是什么,它是...110000 + 110,也就是说-16 + 6,这是{ {1}}。

当然-10也是(按位翻转)...110110,也就是说~1001,其公式为~9,也是{{1} }}。所以系统工作; - )