前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言复习_进制

C语言复习_进制

作者头像
用户7272142
发布2023-04-12 20:27:08
6690
发布2023-04-12 20:27:08
举报
文章被收录于专栏:Republic博客Republic博客

什么是机器数

顾名思义 机器数就是能被计算机识别的二进制形式的数 我们建设计算机的字长为8(就是存储一个字的长度) 十进制3转换二级制的数等于0000 0011 如果是-3 二进制表现形式是1000 0011 最高位是符号位 1代表负数 0代表正数

原码 补码 反码

原码 最高位是符号位 其他数字的绝对值代表本数值 反码 正数的反码依旧是原码 负数的反码是将正数原码各位取反(符号位不变) 补码 正数的补码依旧是其原码 负数的补码是在反码的基础上+1

为什么要使用三种编码表示二进制数

首先明确 正数不管是通过 原码 反码还是补码所表示的结果都一样 但是对于负数 原码要经过取反变成反码 最后在反码的基础上+1变成补码。在刚开始接触进制的时候,我有一个疑惑,为什么不可以用原码编码直接表示二进制,1用00000001表示 -1用10000001表示 1+(-1)=0 可是我们经过原码计算结果是错误的 结果是-2 为了解决原码计算减法的错误 出现了反码 使用反码编码计算 1+(-1)可以得出真值的正确结果 -0 这也是我们所不能接受的结果 于是乎补码的出现解决了 上面的问题

补码的实现原理

用大佬经常讲解使用的钟表比较好理解 假设钟表的字长是一位 进制为十二进制表示 比如下午两点 我们可以写作 14 12+14 12-10 都表示的是下午两点 这里涉及的数学的一个同余概念 就是有两个数a,b 除以一个整数如果余数相等 则称这a,b同余 比如 14 26 2在表盘上表现的形式都是一样的 可以实现化简为加,本质是舍去溢出的部分而不改变结果 补码的实质就是 比如计算-3 找一个可以替代-3的正数253 用253参与计算 进行加法运算后,将得到的结果中溢出的数字舍去后,只读取结果中固定位数(此处是 8 位)的二进制数作为运算的结果。

2023-03-30T02:22:50.png
2023-03-30T02:22:50.png

无符号二进制数

八位二进制数可以表示256个数字 范围是0-255 在计算机读取时,只会读取低八位的二进制数 超过256这个范围 溢出部分会被自动舍去 所以 00000001 和10000001 在补码编码下在计算机看来是一样的都是1

有符号二进制数

有符号二进制数的范围是[-127,128] 通过补码可以实现有符号二进制运算适用无符号二进制运算规则 首先解决了两个0的问题 10000000表示的是-128 其次解决了原码减法运算的错误

补码的计算方法

1.原码 经过取反 得到反码 再+1 变成补码(正数的补码是其本身) 2.负数X+Mod = Sum 比如-3的补码在八位字长计算机中的计算方法 -3+256=253 253的二进制1111 1101 因此-3的补码是11111101

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023 年 03 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是机器数
  • 原码 补码 反码
  • 为什么要使用三种编码表示二进制数
  • 补码的实现原理
    • 无符号二进制数
      • 有符号二进制数
      • 补码的计算方法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档