原码 反码 补码

作者: jsy_hello | 来源:发表于2017-06-27 00:19 被阅读0次

这是基础的概念问题,但有些东西令我很气愤,比如有人说反码就是逐位取反,这种误人子弟的话,确实令我很气愤。我结合自己的学习概括如下,希望对有需要的朋友有所帮助。

首先我们的数分为有符号数无符号数两类,有符号数分为正数负数两类,无符号数全是正数,有符号数的最高位为符号位,0为正,1为负,除掉最高位的符号位以外的数字代表着我们所谓的值域,而无符号数所有数字全是值域。

针对正数,采用除二取余,逆序排列求得原码,正数的反码,补码与原码相同;

针对负数,其`补码`等于对其绝对值先二进制表示,再逐位取反,最后低位加1而成(加1的时候有进位的就进位),补码的补码就是原码,求反码为原码符号位不变,其余位逐位取反,补码为反码低位加1。

正负数求反码方式都不一样,又怎么会来反码就是逐位取反这种滑稽之谈呢?甚至还有人说负数的二进制表示是补码+1,这种说法更是莫名其妙,谁的补码?哪里来的+1?

规则说到这里就完了,如果你想知道Java里面怎么处理的,你可以往下看。

结合Java语言,做个实际说明,我声明 int a = 20, 在Java中,int类型占4个byte,即32bit,即用32位二进制表示,则20的原码为00000000000000000000000000010100,其中最左边的那个0为符号位,剩余的26个0加上10100为值域,合起来意思就是正的20,那么-20的原码是多少呢,按照负数求原码的规则,该是11111111111111111111111111101100,最高位为1,代表为负数。但是给你这么个二进制数11111111111111111111111111101100,怎么知道它的十进制表示多少呢?首先,这是java的int型,属于有符号数(你需要知道,java里面的数字类型全是有符号数),读取最高位符号位1,代表负数,按照求负数原码的方式逆着操作就可以找出这个负数对应的绝对值了,先减1,得11111111111111111111111111101011然后逐位取反,得到00000000000000000000000000010100,这是个正数,代表这20,所以加起来这是负数的20,即-20。

相关文章

  • 软件测评师做题技巧

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

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

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

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

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

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

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

  • 补码

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

  • 【计算机】我的收藏文章索引

    索引表 索引标题链接摘要原码、反码、补码《原码、反码、补码,详解》http://www.cnblogs.com/z...

  • [计基]-二进制之补码

    一.基础名词 原码 : 0011 反码 :0011(原码) >> 1100(反码) (原码按位取反) 补码 :00...

  • 技术问 - 原码、反码、补码

    什么是原码、反码、补码:

  • 位运算

    1.原码、反码、 补码正数的原码、反码、 补码都一样 正数以原码存储在计算机负数 以补码存储在计算机 例...

  • 原码、反码和补码

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

网友评论

    本文标题:原码 反码 补码

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