整数的存储和运算

Posted ywxt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整数的存储和运算相关的知识,希望对你有一定的参考价值。

原码反码和补码

  1. 有符号数最高位为符号位,0为正数,1为负数。
  2. 正数的原码、反码和补码都是正数的二进制

    e.g. 6(10)=00000110(2) 原码:00000110 反码:00000110 补码:00000110

  3. 负数的原码为它绝对值的二进制,但最高位为1,反码为原码取反(除了符号位,0变1,1变0),补码为反码+1.

    e.g. 6(10)=00000110(2), -6(10)的原码为10000110,反码为11111001,补码为11111010.

  4. 正数存储原码,负数存储补码。
  5. 负数原码、反码、补码的互化:

    原码除了符号位,其他为取反为反码,反码+1为补码。

    原码直接转补码: 从右开始数,遇到第一个1以后,1左边的各位(除了符号位)取反。

    ? e.g. -6(10)的原码为10000110,从右边数起,第一个是0,跳过,第二位是1,从下一位起

    开始取反。6的补码:11111010;

    补码转原码:补码取反(除符号位)后+1,或者按照原码直接转补码的方法转换(符号位不变),即补码的补码为原码。

    ? e.g. (1) -6的补码:11111010,取反:10000101 再+1得原码:10000110

    ? (2)11111010->10000110

整数的运算(加减法)

补码相加。

  1. 加法:

5+(-6) :00000101+11111010=11111111,11111111最高位为1,负数,所以先把它转化为原码:10000001,即-1(10)

-6+6:11111010+00000110=10000000,出现了9位,但只存储8位,最高位被舍弃,即为0.如果不用补码而用反码运算,就会出现+0和-0的问题。

  1. 减法:转化为加法操作。

以上是关于整数的存储和运算的主要内容,如果未能解决你的问题,请参考以下文章

整数的存储和运算

长整数加法运算

大整数运算模板总结

使用整数字段通过按位运算存储选定的日期

用于减少内存的 Java 整数标志和按位运算

大数运算