当前位置:网站首页>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. 致读者
谢谢大家的阅读
边栏推荐
- App快速开发建设心得:小程序+自定义插件的重要性
- JeeSite新建报表
- 36-Jenkins-Job迁移
- [SWPU2019]Web1
- UI自动化测试 App的WebView页面中,当搜索栏无搜索按钮时处理方法
- [8.2] Code Source - [Currency System] [Coins] [New Year's Questions (Data Enhanced Edition)] [Three Stages]
- 四位数显表头设计
- A 35-year-old software testing engineer with a monthly salary of less than 2W, resigns and is afraid of not finding a job, what should he do?
- 【8.1】代码源 - 【第二大数字和】【石子游戏 III】【平衡二叉树】
- Feature preprocessing
猜你喜欢

Android interview question - how to write with his hands a non-blocking thread safe queue ConcurrentLinkedQueue?

What is ASEMI photovoltaic diode, the role of photovoltaic diode

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

浅析主流跨端技术方案

Machine Learning Overview

Mini Program_Dynamic setting of tabBar theme skin

dedecms后台生成提示读取频道信息失败的解决方法

Paparazzi: Surface Editing by way of Multi-View Image Processing

Industry Status?Why do Internet companies prefer to spend 20k to recruit people rather than raise their salary to retain old employees~

多御安全浏览器 V10.8.3.1 版正式发布,优化多项内容
随机推荐
多御安全浏览器 V10.8.3.1 版正式发布,优化多项内容
Qixi Festival earn badges
mutillidae下载及安装
Detailed explanation of Mysql's undo log
概率论的学习和整理8: 几何分布和超几何分布
【Mysql进阶优化篇02】索引失效的10种情况及原理
Feature preprocessing
七夕节代码表白
小程序_动态设置tabBar主题皮肤
The most comprehensive exam questions for software testing engineers in 2022
UE4 opens door via interaction (keyboard key)
[BSidesCF 2019]Kookie
从企业的视角来看,数据中台到底意味着什么?
狗仔队:表面编辑多视点图像处理
[MRCTF2020] Ezpop (detailed)
How to solve complex distribution and ledger problems?
【测量学】速成汇总——摘录高数帮
DNS被劫持如何处理?
About the installation of sklearn library
UE4 第一人称角色模板 添加冲刺(加速)功能