美文网首页
python中的原码反码和补码

python中的原码反码和补码

作者: wanzhouyi | 来源:发表于2021-05-29 00:17 被阅读0次

python中的原码反码和补码

原码反码和补码的概念

  1. 原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位,1代表负,0代表正。
  2. 反码:反码可由原码得到。如果是正数,反码与原码相同;如果是负数,反码是其原码(符号位除外)各位取反而得到的。
  3. 补码:补码可由原码得到。如果是正数,补码与原码相同;如果是负数,补码是对其原码(除符号位外)各位取反,并在末位加1而得到的(有进位则进位,但不改变符号位)。

更详细的介绍可参考这篇文章

原码反码和补码的示例

如下以8位二进制为例:

真值 原码 反码 补码 备注
2^7-1=127 0 1111111 0 1111111 0 1111111 正数的原码反码补码相同
+ 7 0 0000111 0 0000111 0 0000111 正数的原码反码补码相同
+ 1 0 0000001 0 0000001 0 0000001 正数的原码反码补码相同
0 0 0000000 0 0000000 0 0000000 正数的原码反码补码相同
- 1 1 0000001 1 1111110 1 1111111 负数的补码是符号位不变其余取反加 1
- 7 1 0000111 1 1111000 1 1111001 负数的补码是符号位不变其余取反加 1
−(2^7−1)=−127 1 1111111 1 0000000 1 0000001 负数的补码是符号位不变其余取反加 1

特殊地数字在计算机中用二进制补码形式表示,补码10000000表示的不是 -0,而是-128

python中的原码反码及补码

一般来讲,整形数在内存中是以 补码 的形式存放的,输出的时候同样也是按照 补码 输出的。

但是在 Python 中,情况是这样的:

  1. 整形是以 补码 形式存放的,输出的时候是按照 二进制 表示输出的;
  2. 对于 bin(x)(x为 十进制负数),输出的是它的原码的二进制表示加上一个负号,方便查看
  3. 对于 bin(x)(x 为 十六进制负数),输出的是对应的二进制表示。

所以为了获得十进制负数的补码,我们需要手动将其和 0xffffffff 进行与操作,得到一个十六进制数,再交给 bin() 转化,这时内存中得到的才是你想要的补码。

a = bin(-3)
print(a)

a = bin(3)
print(a)

b = bin(-3 & 0xffffffff)
print(b)

c = bin(0xfffffffd)
print(c)

# 输出
# -0b11
# 0b11
# 0b11111111111111111111111111111101
# 0b11111111111111111111111111111101

相关文章

  • python中的原码反码和补码

    python中的原码反码和补码 原码反码和补码的概念 原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位...

  • 原码、反码、补码和移码

    书中关于原码、反码、补码和移码的定义如下(n是机器字长):原码: 反码: 补码: 移码: 原码, 反码, 补码的基...

  • 计算机为什么要使用原码、反码、补码

    1. 什么是原码、反码、补码 先看一个例子: +1和-1的原码、反码、补码的表示 原码、反码、补码的计算方式如下:...

  • 软件测评师做题技巧

    第一类补码,反码,原码 正数:原码=反码;补码=原码负数:反码=原码求反;补码=反码+1 第二类用例概率的计算 测...

  • 2018-10-22 Python31 原码、反码、补码

    原码、反码、补码 1)如何计算补码?规则: 正数:原码 = 反码 = 补码负数:反码 = 符号位不变,其他位取反补...

  • 原码、反码和补码

    正数的原码、反码和补码相同,亦是正数 负数的原码、反码和补码符号位为1,代表负数,反码在原码的基础上符号位不变,其...

  • Java中高位转低位溢出的计算过程

    结果是: 计算机中是以补码进行计算 正数的反码补码都是原码,如:10原码: 1010反码: 1010补码:1010...

  • 补码

    原码、反码、补码 原码:符号位 反码:减法变加法 补码:+1解决-0问题 数学原理 同余 反码:mod127 补码...

  • JAVA中负数的二进制表示

    计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,反码=原码按位取反 补码=反码+1。 移码为补码...

  • 为什么byte的范围是-128~127?

    在研究这个问题前,首先需要知道计算机中的原码、反码、补码正数的原码、反码、补码都是本身负数的反码是将原码除符号位全...

网友评论

      本文标题:python中的原码反码和补码

      本文链接:https://www.haomeiwen.com/subject/bpzesltx.html