码迷,mamicode.com
首页 > 其他好文 > 详细

整数的存储和运算

时间:2018-09-18 19:01:27      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:开始   加减法   不用   str   问题   整数   跳过   第一个   反码   

原码反码和补码

  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. 减法:转化为加法操作。

整数的存储和运算

标签:开始   加减法   不用   str   问题   整数   跳过   第一个   反码   

原文地址:https://www.cnblogs.com/ywxt/p/int_memory.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!