经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
整数的存储和运算
来源:cnblogs  作者:雨雾星天  时间:2018/9/25 20:33:18  对本文有异议

原码反码和补码

  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. 减法:转化为加法操作。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号