zoukankan      html  css  js  c++  java
  • 反码,补码,原码——定点数的表示方法

        上次健民欧巴留了这样一个作业:弄清楚反码,补码,原码的定义与区别,在寻仙问道之后,我明白了很多关于反码,补码,原码的东西。

    原码,通俗的说就是以二进制的定点数表示;反码,就是正数与原码相同,负数部分与原码的相反;补码,就是正数与原码相同,负数在反码的基础上加1。

    比如说:(ziqiu.zhang)

    计算机巧妙地把符号位参与运算, 并且将减法变成了加法, 背后蕴含了怎样的数学原理呢?

    将钟表想象成是一个1位的12进制数. 如果当前时间是6点, 我希望将时间设置成4点, 需要怎么做呢?我们可以:

    1. 往回拨2个小时: 6 - 2 = 4

    2. 往前拨10个小时: (6 + 10) mod 12 = 4

    3. 往前拨10+12=22个小时: (6+22) mod 12 =4

    2,3方法中的mod是指取模操作, 16 mod 12 =4 即用16除以12后的余数是4.

    所以钟表往回拨(减法)的结果可以用往前拨(加法)替代!

    现在的焦点就落在了如何用一个正数, 来替代一个负数. 上面的例子我们能感觉出来一些端倪, 发现一些规律. 但是数学是严谨的. 不能靠感觉.

    有种简单的表达方法:

    1. 反码=除符号位按位取反的值。

    2. 补码=反码+1

    3. 对补码求反加1即得原码;对原码求反加1即得补码。

    负数在内存中用其补码表示。所以,对于char型数据,10000000为-128;10000001为-127;11111111为-1。例:1100110011 原       1011001100 反 除符号位,按位取反

           1011001101 补 除符号位,按位取反再加1

    就这些了,寻觅寻觅,思索思索,没有更深刻的理解了。

  • 相关阅读:
    再提一个建议,不过就要辛苦dudu了
    项目中的小项目实现在望
    Visual Studio.Net 技术Tip
    IQueryable与foreach的困惑?
    [转贴]浅析大型网站的架构
    [原创]WCF入门级使用教程(转载请注明出处)
    [原创]在msmq3.0中使用http协议发送消息
    [转贴][WCF Security] 4. 用户名/密码身份验证
    [转贴][WCF Security] 1. 基本概念
    [转]在SQL Server2005中进行错误捕捉
  • 原文地址:https://www.cnblogs.com/kmxbf2292/p/9750492.html
Copyright © 2011-2022 走看看