当前位置:网站首页>C语言-大白话理解原码,反码和补码
C语言-大白话理解原码,反码和补码
2022-08-05 04:18:00 【π指针】
谢谢读者的阅读
原码,反码和补码
1.理解存储类型
- 数据分为字节型和字型数据
字节型数据占8位,它的原码,反码,补码都是8位,表示0-255
字型数据占16位,它的原码,反码,补码都是16位, 表示0-65535 - 那么就有人会有疑问:8位二进制和16位二进制都为1 当然可以代表255或者65535是没错,但是我又可以代表-127,-32767呀。且慢既然这么说,那么我们是不是就肯定要搞清楚是什么存储方式了,是无符号存储还是有符号存储?
- 在8个位中,如果是无符号存储-那就是0-255没有负数,如果是有符号数那么他自己都要占用一个位所以表示为-127-128。
所以得知,我们的C语言int类型没有写unsigned的时候也是一个有符号数,他的范围是-2147483648~+2147483647,而有符号数为4,294,967,295 - 那么原码是什么存储?我们讨论原码是讨论他是有符号还是无符号的?很负责任的告诉大家,这是一个有符号的,所以我们去看八位的原码或者十六位的原码,一看就知道他是正或者是负了
2.原码,反码,补码
1.抛出三码概念
原码 :最高位是符号位,0代表正数,1代表负数,其他是0或1。
反码:正数的反码与原码一致,负数的反码是对原码按位取反,符号位不变。
补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。
例子 00000001 (由原码得出 十进制是1)
例子 10000001 (由原码得出 十进制是-1??)
那么是不是就?
00000001
+ 10000001
------------
10000010
1+(-1) = -2??
离谱!!!!
- 但是我负责任的告诉你,这就是-1,但是直接算,肯定就不是这样算。要进行二进制的加减法,最后还是变成加法进行的。
我们是否有一个疑问,计算机-1+1直接算就不等于0了,那么计算机该怎么办,怎么算才可以等于0? - 我们要找出1+(-1)=0,使其成立,那么我们假设 -1有一个替补,是八位的未知数x
00000001
+ xxxxxxxx
------------
00000000
- 可以得到如果是11111111加1 变成100000000就会造成位运溢出,丢失最高位1,那么这不就是十进制的0吗?所以我敢肯定 要加上(-1)等于0,就是加上他的替补,他就是就是111111111
- 原来是这么算,除了最高位以外,我全部都取反 然后再+1
也正是这样,补码的概念也是如此,就是原码除了最高位后其余取反 然后 +1,然而他的正面计算过程是
例 10000001 原码
想变补码先变反码才可以,按位取反,除了最高位的符号位
例 11111110 反码
变为补码,只需要在反码后面加1就可以
例 11111111 补码 (原码除了最高位取反 然后+1)
所以,某种意义上这就变成了 1 + (-127) = 0了,但是大家别搞混,这样理解会有压力
我们还是老老实实的理解成:计算用的都是正数或者负数的补码进行计算的。
2.最后总结
引入原码 反码 和补码的目的就是为了解决减法问题,因为计算机CPU的运算器中只有加法器,要把减法转化成加法来计算。
3. 致读者
谢谢大家的阅读
边栏推荐
- dedecms后台生成提示读取频道信息失败的解决方法
- MySql index learning and use; (I think it is detailed enough)
- Event parse tree Drain3 usage and explanation
- The log causes these pits in the thread block, you have to guard against
- UE4 第一人称角色模板 添加蹲伏功能
- 说说数据治理中常见的20个问题
- In the WebView page of the UI automation test App, the processing method when the search bar has no search button
- 【Mysql进阶优化篇02】索引失效的10种情况及原理
- 4T硬盘剩余很多提示“No space left on device“磁盘空间不足
- bytebuffer put flip compact clear 方法演示
猜你喜欢

35岁的软件测试工程师,月薪不足2W,辞职又怕找不到工作,该何去何从?

The most effective seven performance testing techniques of software testing techniques

iMedicalLIS监听程序(2)

bytebuffer 使用demo

不看后悔,appium自动化环境完美搭建

Swing有几种常用的事件处理方式?如何监听事件?

write the story about us

markdown如何换行——md文件

UI自动化测试 App的WebView页面中,当搜索栏无搜索按钮时处理方法
![[BSidesCF 2019] Kookie](/img/29/19e7c244feb86b37ab32a53aa11f25.png)
[BSidesCF 2019] Kookie
随机推荐
C+ +核心编程
狗仔队:表面编辑多视点图像处理
国学*周易*梅花易数 代码实现效果展示 - 梅花心易
程序开发的一些常规套路(一)
iMedicalLIS listener (2)
[MRCTF2020]PYWebsite
DEJA_VU3D - Cesium功能集 之 057-百度地图纠偏
浅析主流跨端技术方案
In the hot summer, teach you to use Xiaomi smart home accessories + Raspberry Pi 4 to connect to Apple HomeKit
[CISCN2019 South China Division]Web11
AUTOCAD——标注关联
Mysql's redo log detailed explanation
UE4 第一人称角色模板 添加冲刺(加速)功能
C++ core programming
UI自动化测试 App的WebView页面中,当搜索栏无搜索按钮时处理方法
write the story about us
pyqt5 + socket 实现客户端A经socket服务器中转后主动向客户端B发送文件
Visibility of multi-column attribute column elements: display, visibility, opacity, vertical alignment: vertical-align, z-index The larger it is, the more it will be displayed on the upper layer
UE4 第一人称角色模板 添加蹲伏功能
Bosses, I noticed that a mysql CDC connector parameters scan. The incremental. Sna