三码——原码、反码、补码

 

百度词条:

  计算机中的有符号数有三种表示方法,即原码反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同 [1]  。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 [2]  。

原码:

  符号位0表示正数,符号位1表示负数

  正数原码 = 0 + 正数绝对值

  负数原码 = 1 + 负数绝对值

反码:

  正数的反码不变,负数原码符号位的1不变,绝对值部分按位取反

补码:

  正数的补码等于原码,负数的补码等于负数的反码加1

例如:

  +20的原码:00010100

  +20的反码:00010100

  -20的原码:10010100

  -20的反码:11101011

补码:

  正数补码 = 正数反码 = 正数原码

  负数补码 = 负数反码符号位的1不变,绝对值部分+1

例如:

  +20原码:00010100

  +20反码:00010100

  +20补码:00010100

 

  -20原码:10010100

  -20反码:11101011

  -20补码:11101100

 

  计算机在执行有负数参与的计算时,就必须用补码。原因是计算机内部只有加法器,没有减法器,换言之,计算机只能进行加法运算,不能进行减法运算,所以,在计算减法运算时,需要通过转换成加上“减数相反数”的形式进行运算,因此计算机中引入了补码运算。

 

 

具体计算:

  取一个数字的补码表示数:

1.

 

        if (num > 0)
            x = num;
        else
            x = pow(2, 32) + num;
2.
  另一个计算法为:
  unsigned int x=num;
  直接一句转化。
学习博客在这里
【Over】
posted @   Renhr  阅读(1179)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示