第一次课后作业

原码、反码和补码出现的原因?

由于计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储。根据冯·诺依曼提出的经典计算机体系结构框架,一台计算机由运算器、控制器、存储器、输入和输出设备组成。其中运算器只有加法运算器,没有减法运算器(据说一开始是有的,后来由于减法运算器硬件开销太大,被废了)。所以计算机中没办法直接做减法的,它的减法是通过加法实现的。现实世界中所有的减法也可以当成加法的,减去一个数可以看作加上这个数的相反数,但前提是要先有负数的概念,这就是为什么不得不引入一个符号位。符号位在内存中存放的最左边一位,如果该位位0,则说明该数为正;若为1,则说明该数为负。而且从硬件的角度上看,只有正数加负数才算减法,正数与正数相加,负数与负数相加,其实都可以通过加法器直接相加。原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。

1、原码、反码、补码的概念

原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。

反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。

补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。

例如 :5

原码:0101       

反码:0101

补码:0101

例如 :-5

原码:1101

反码:1010

补码:1011

将补码1011  转换为原码

补码:1011

符号位不变,数值位取反:1100

加1后得到原码:1101

补码变成原码的方式是:正数的补码与原码一致,负数的补码按位取反加1,符号位不变

反码变成原码的方式是:正数的反码与原码一致,负数的补码按位取反,符号位不变

3、原码、反码、补码 表示范围

n+1位数字,绝对值最大的原码是  -(2^n - 1)和 2^n - 1

n+1位数字,绝对值最大的反码是  -(2^n - 1) 和 2^n - 1

n+1位数字,绝对值最大的补码是  -2^n

例如

原码:

二进制无符号000~111      十进制0~ 7  0 ~ 2^3-1

二进制有符号0000~0111    十进制0~7   0 ~ 2^3-1

二进制有符号1111~1000   十进制-7~0   -(2^3-1) ~ 0

源码、反码、补码:

计算机中数据是由二进制存储:

  1、对于一个正数来说:二进制原码、反码、补码是同一个,完全相同。

   例如:

   对应的二进制原码:00000000 00000000 00000000 00000001
   对应的二进制反码:00000000 00000000 00000000 00000001
   对应的二进制补码:00000000 00000000 00000000 00000001

  2.对于一个负数,他的反码,将第一位符号位保留,剩下的反向写出。补码将反码加1;

  对应的二进制原码:10000001
  对应的二进制反码(符号位不变,其它位取反):11111110
  对应的二进制补码(反码+1):11111111

posted @   来自理塘的胡图图  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示