当前位置:网站首页>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. 致读者
谢谢大家的阅读
边栏推荐
- NPDP证书含金量高吗?跟PMP相比?
- Is the NPDP certificate high in gold content?Compared to PMP?
- Redis key基本命令
- Based on holding YOLOv5 custom implementation of FacePose YOLO structure interpretation, YOLO data format conversion, YOLO process modification"
- dedecms报错The each() function is deprecated
- Industry Status?Why do Internet companies prefer to spend 20k to recruit people rather than raise their salary to retain old employees~
- How to solve the three major problems of bank data collection, data supplementary recording and index management?
- [BJDCTF2020] EasySearch
- The most effective seven performance testing techniques of software testing techniques
- 关于sklearn库的安装
猜你喜欢
如何解决复杂的分销分账问题?
MySql的索引学习和使用;(本人觉得足够详细)
Mini Program_Dynamic setting of tabBar theme skin
程序开发的一些常规套路(一)
日志导致线程Block的这些坑,你不得不防
How do newcomers get started and learn software testing?
从企业的视角来看,数据中台到底意味着什么?
The most effective seven performance testing techniques of software testing techniques
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?
[CISCN2019 华东南赛区]Web11
随机推荐
how to measure distance from point to face in creo
mutillidae下载及安装
阿里本地生活单季营收106亿,大文娱营收72亿,菜鸟营收121亿
四位数显表头设计
UI自动化测试 App的WebView页面中,当搜索栏无搜索按钮时处理方法
不看后悔,appium自动化环境完美搭建
炎炎夏日教你利用小米智能家居配件+树莓派4接入Apple HomeKit
dedecms织梦tag标签不支持大写字母修复
Spark Basics [Introduction, Getting Started with WordCount Cases]
NPDP证书含金量高吗?跟PMP相比?
[BSidesCF 2019] Kookie
cross domain solution
UE4 opens door via interaction (keyboard key)
Talk about 20 common problems in data governance
In the WebView page of the UI automation test App, the processing method when the search bar has no search button
Four-digit display header design
36-Jenkins-Job Migration
DEJA_VU3D - Cesium功能集 之 056-智图Arcgis地图纠偏
Spark基础【介绍、入门WordCount案例】
Mysql's redo log detailed explanation