计算机中正数是按照原码存储的,负数是按照补码存储的

下面举例 1 和-1,按照8位存储。

正数:正数的原码,反码,补码都和原码一样,即正常的二进制表示。
负数:原码就是正常的二进制表示。反码就是原码的按位取反(符号位不变),补码是在反码的基础上+1。

1 -1
原码 0000 0001 1000 0001
反码 0000 0001 1111 1110
补码 0000 0001 1111 1111

1 + 1 = 2

  0000 0001 0000 00010000 0010 用1的原码直接相加得到了0000 0010 = 2 和我们预期的结果是一致的。说明没问题

为什么负数用补码表示呢?

我们计算 1 - 1,我们可以转换成 1 +(-1)= 0 这里需要明白一个问题,在计算机内部其实只有加法器。其实减去一个数就相当于加上一个负数。

如果用 -1 的原码加的话:0000 0001 = 1 的原码
1000 0001 = -1的原码
1000 0010 = -2  明显和我们的预期结果不一样,

为了解决原码减法的问题,就出现了反码,使用反码再来计算:

0000 0001 = 1 的反码
1111 1110 = -1 的反码
1111 1111 这是反码,转为原码就是1000 0000 即为-0;

我们都知道0不分正负,为了解决0的符号问提,就出现了补码,然后我们子啊用补码:

   0000  0001 = 1 的补码1111  1111 = -1 的补码
1  0000 0000  因为我们上面默认的是8位存储,超过了8位就舍去,剩下的是0000 0000 = 0,符合我们的预期结果0。

那问题来了,-0跑哪里去了?,-0即1000 0000 这里表示的-128,并且-128没有原码和反码,只有这个补码。

然后我们看一下-127的原码、反码、补码:原码: 1111 1111反码: 1000 0000补码: 1000 0001。

-127 -1 = -128,所以-127的补码-1应该也是-128的补码,即1000 0001 -1 = 1000 0000。因此1000 0000就是 -128的补码。

在一个字节8位中,如果用原码来表示值的大小范围,只能是 1111 1111 ~ 0111 1111,即-127~127 。但是,用补码的话可以表示的取值范围

设置127 — -128,正好是2^8,256个数。

因此,-0可以表示一个最低数。在8位二进制中它是1000 0000 ,在32位中,它就是 1000 0000 0000 0000 0000 0000 0000 0000 ,int的最

小值。(32位数值大小范围为 -2^31 ~ 2^31 -1)

总结:补码的存在解决了0的符号问题,同时统一了计算机的加减法运算。

计算机中的位运算—正数,负数,原码,反码,补码相关推荐

  1. python二进制反码例题_python中的进制转换和原码,反码,补码

    python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...

  2. 二进制 正数 负数 源码反码补码

     二进制的正负数 . HEX (十六进制) EA                        EA Oct(十进制)      有符号                   无符号 -22       ...

  3. 原码反码补码以及左移右移无符号左移右移。

    一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符 ...

  4. 关于 原码 反码 补码 位运算

    二进制 原码:最高位为符号位,0为正  1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 - ...

  5. 负数原码与补码之间相互转换

    背景:计算机内部用补码表示二进制数.符号位 1 表示负数,0 表示正数. 正数:无区别,正数 的原码= 反码 = 补码 重点讨论负数 若已知 负数 -8,则其 原码为:1000 1000,(1为符号位 ...

  6. 原码反码补码之间运算转换

    1. 正数的原码=反码=补码 2. 负数的反码=在其原码的基础上, 符号位不变,其余各个位取反 负数的补码=在反码的基础上+1 负数的补码=在原码的基础上, 符号位不变, 其余各位取反, 最后末位+ ...

  7. 原码 反码 补码 移码(变补)补码与移码的作用

    定义 正数: 原码=反码=补码 负数: 原码:符号位+数值位 (符号位0为正数,1为负数) eq: -7 :10000111 反码:符号位不变,其它位取反:11111000 补码:反码+1:11111 ...

  8. 浅谈 -128的原码 反码 补码

    以java中byte表示:2字节 8位,-128 首先首位1表示负数,128的正数为1000 0000(其实是-128),然后拼接为1 1000 0000,大于8位,则取低8位,为1000 0000, ...

  9. 二进制八进制十进制十六进制及原码反码补码

    1.进制的介绍 定义:进位制,人们规定的一种进位方式:表示某一位置上的数,运算时是逢X进一位. 十进制是逢十进一:二进制是逢二进一,八进制是逢八进一: 常见进制:二进制,八进制,十进制,十六进制: 学 ...

最新文章

  1. wordpress漏洞_聊聊 WordPress 5.1.1 CSRF to RCE 漏洞
  2. python这个软件学会能做什么工作-学会Python后都能做什么?网友们的回答简直不要太厉害...
  3. R3获取kernel32地址
  4. 6个月达不到25.6万年薪AI工程师,进不了大厂全额退款
  5. mysql数据库崩_mysql数据库崩溃_MySQL
  6. java中的线程不安全和实例解析
  7. 年仅26岁!这位双一流大学的特任教授,攻克世界数学难题
  8. 怎么使用Nginx服务开启HTTPS
  9. 动态代理解决网站字符集编码
  10. python同构数_怎么用python判断一个数是否是同构数?
  11. react + antd table +hooks 如何实现表格序号自增 翻页后序号不从1开始算起
  12. 解决打开一个excel文件,却出现两个窗口的办法
  13. bilibili自动上传视频脚本(纯ruby)
  14. 英语语法长难句——并列句
  15. 最短路径算法|Dijkstra‘s Algorithm
  16. VBNet WinForm如何开发一个照片自动排版程序
  17. 海南信用社计算机试题,2021年海南农村信用社计算机笔试内容17
  18. 过滤树形结构数组的方法
  19. [免费的win7 娘]WES7SP1 测试心得
  20. 2022年2月halcon licenses

热门文章

  1. STM32自学笔记-6-RS485串口通信
  2. GrabCut算法详解:从GMM模型说起
  3. vue 中后台系统解决方案vue-admin
  4. Windows下redis修改端口号无效
  5. 如何使用Python渲染动画
  6. Markdown使用中的一些点
  7. 单片机引脚控制继电器最简单的电路方式
  8. Qt5 添加菜单图标资源图片
  9. Charles抓包Android app
  10. 学术造假导致导师自杀,后将这段学术丑闻经历出书贩卖,一年收入上百万......