【C++笔记】原码、反码、补码

原码,反码,补码,到底是个啥? -?,你来这看看吧。 写在前面:这里是小王成长日志,一名普通在校大学生,想成学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人,平时博客内容主要是一些系统的学习笔记,项目实战笔记,一些技术的探究和自己的一些思考。欢迎大家关注,你们的每一个评论点赞关注我都会仔仔细细去看的。有任何问题欢迎交流,我会尽我所能帮助大家的,共创优快云美好环境。 这篇博客主要讲解计算机的原码,反码和补码,以他们之间的关系... 阅读详情

数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。

  对于一个数, 计算机要使用一定的编码方式进行存储。 原码, 反码, 补码是计算机存储一个具体数字的编码方式。

  一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。比如,十进制中的数 +2 ,计算机字长为8位,转换成二进制就是[00000010]。如果是 -2 ,就是 [10000010] 。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 [10000010],其最高位1代表负,其真正数值是 -2 而不是形式值130([10000010]转换成十进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。

  1. 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
  2. 反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
  3. 补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)

举例:

十进制数原码反码补码
850101 01010101 01010101 0101
-851101 01011010 10101010 1011
90000 10010000 10010000 1001
-91000 10011111 01101111 0111

那么计算机为什么要使用补码呢?

  首先,根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1+(-1), 所以计算机被设计成只有加法而没有减法, 而让计算机辨别”符号位”会让计算机的基础电路设计变得十分复杂,于是就让符号位也参与运算,从而产生了反码。 
  用反码计算, 出现了”0”这个特殊的数值, 0带符号是没有任何意义的。 而且会有[0000 0000]和[1000 0000]两个编码表示0。于是设计了补码, 负数的补码就是反码+1,正数的补码就是正数本身,从而解决了0的符号以及两个编码的问题: 用[0000 0000]表示0,用[1000 0000]表示-128。 
   注意-128实际上是使用以前的-0的补码来表示的, 所以-128并没有原码和反码。使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数。 这就是为什么8位二进制, 使用补码表示的范围为[-128, 127]。

 

原码反码补码移码详解:从408考研到工程实战 计算机底层如何表示正负数?机器数、原码、反码、补码、移码这四种编码方式,构成了计算机组成原理的基础,也是408考研和嵌入式开发的高频考点。补码通过同余思想将减法统一为加法,让符号位能直接参与运算,并解决了0的表示唯一性;移码则通过偏置值让阶码可以按无符号数比较,成为IEEE 754浮点数标准的核心设计。在实际工程中,无符号数与有符号数的隐式转换、溢出判断、二进制协议解析等场景,都隐藏着补码与移码的常见陷阱。掌握它们的定义、范围、转换规则和位级视角,不仅能应对考研选择题,也能帮助开发者避开底层开发中的隐蔽Bu 阅读详情

相关推荐

计算机组成原理:原码、反码、补码、移码及溢出判断详解

计算机中如何表示负数是计算机组成原理的基础问题,也是408统考与期末复习的高频考点。从真值与机器数的关系出发,原码、反码、补码、移码分别服务于直观显示、过渡转换、统一加减运算与浮点数阶码比较。理解模与同余是掌握补码的关键,符号位参与运算使减法变为加法,而溢出判断则需要区分CF与OF。无符号数运算同样遵循模2^n回绕规则,同一二进制串按有符号或无符号解释可能得到相反结果。本文以手算例题和代码验证的方式,系统梳理码制转换、补码加减、溢出判断及浮点阶码偏置值等经典考法,适合备考408或计算机组成原理课程复习使用。

weixin_33841503的博客 397

C++中的补码

在计算机底层中,只可以进行加法运算,所谓的补码就是通过加法来表示减法。 下面先来了解一些简单的概念: 补码的计算方式: 此方法是计算机实际内部的计算方式,先将二进制最左边的数前面添加一个负号,然后计算权重,后面的按照正常计算方式即可。 这种方法是应该是大学里面常见的计算方法,但是不是很符合数学方面的计算,因为需要作区分。 U开头表示无符号数,T开头表示有符号数。 8、16、32、64分别表示二进制的位数。 二进制为了方便表示十六进制,四位二进制代表一位十六进制。...

陈同学 4712

C语言 【学习笔记】 - 基础、理论(原码/反码/补码)、函数(字符串、定义)、指针、内存(函数、结构)、复合类型、函数(调用原理、指针、接口)

文章目录关键字数据类型short、int、long、long longcharfloat、double类型限定符常量进制的打印原码、反码、补码一些C语言特殊的运算符goto& (变量地址) 关键字 数据类型 几种基本数据类型的字符(Byte)大小(32位): short、int、long、long long 常量表示 整型常量 所需类型 10 int 10l, 10L long 10u, 10U unsigned int 10ul, 10UL unsigned

LawssssCat的博客 1498

C++原码,反码,补码,位运算符(<<,>>,|,^,&)

如果该运算对象是带符号类型,在左侧插入符号位的副本或值为0的二进制位。

2301_80224556的博客 2368

【007】C++编程必知:原码、补码、反码的全面解读

计算机存储的是数据的补码。原码:计算机中对数字的二进制定点表示方法。比如123的原码是0111 1011。无符号数:原码=反码=补码。有符号数:要分正数和负数,正数的最高位为0,负数的最高位为1。其中,正数的原码、反码、补码都是相同的;负数的反码等于原码的符号数(最高位)不变,其他位取反;补码等于反码+1。比如:-123的原码是1111 1011,反码为1000 0100,补码为1000 0101。原码、补码和反码都是用于计算机表示有符号整数的方法。

Lion_Long的博客 2919

Windows下用Caddy一键搞定LiveKit本地HTTPS部署(含自签名证书避坑指南)

本文详细介绍了在Windows本地开发环境中,如何利用Caddy服务器一键部署支持HTTPS和WSS的LiveKit实时通信服务。文章重点解决了自签名证书的生成与配置难题,提供了完整的避坑指南和防火墙设置,帮助开发者快速搭建安全的WebRTC测试环境,实现局域网内的实时音视频互动。

weixin_29274969的博客 583

C++ 原码、反码、补码和位操作符

其实说到 2 进制,在计算机内部,数值是以 2 进制的形式来进⾏表⽰和存储。后⾯要讲解的位运算的 操作符就是针对整数的⼆进制来进⾏运算的。所以下⾯讲解⼀下整数的 2 进制表⽰形式。移位运算符:>>位运算符 : & | ^整数的 2 进制表⽰⽅法有三种,即原码、反码和补码;整数分为有符号整数(signed)和⽆符号整数 (unsigned)。

hjx1235的博客 2158

从零到一:手把手教你用Python搭建医学影像识别CNN模型(附完整代码)

本文详细介绍了如何使用Python和TensorFlow/Keras从零开始构建一个医学影像识别的CNN模型,涵盖数据预处理、模型架构设计、训练调优及部署全流程。通过实战案例和完整代码,帮助开发者快速掌握深度学习在医学影像识别中的应用,特别适合医疗AI领域的初学者和研究者。

spark7igniter的博客 200

用C++求得数据的原码、反码、补码。

学了cpp两个月左右了,为了练习尝试了一下用代码实现求出数据的原码、反码和补码,代码及思路如下: 源文件: #include<iostream> using namespace std; #include<vector> #include"value.h" //输入一个数据,求出他的原码、反码、补码 void test1() { int a; cin >> a;//用户输入的数据 vector<bool>v;//用来装二进制数 //先转

LWX3289765163的博客 4810

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

zerorzeror的博客 3117

Keil开发中CMSIS Driver API缺失问题的排查与解决

本文详细解析Keil开发中CMSIS Driver API缺失问题的根源与解决方案。针对版本不匹配、安装不完整等常见原因,提供在线与离线安装的对比及详细排查步骤,重点涵盖版本兼容性分析与项目配置验证,帮助开发者彻底解决API缺失错误并预防问题复发。

rust6ferris的博客 550

C++ 原码、反码、补码理解笔记

电脑是以补码形式来表示数字的。正数:原码,反码,补码都相同 ;负数:反码为除符号位外按位取反,补码为反码+1。 如-1这个负数: -1的补码:1111 1111 -1的反码:1111 1110 -1的原码:1000 0001 比如我们平时看到5000的无符号短整数(16位整数),其实是原码(位模式)转换成反码再转换成补码后显示的结果,所以如果要知道原码是多少,需要反向转换一下,即从补码转成反码再转成原码。 1) 补码:无符号短整数 50,000在计算机中存储时是补码11000011 01010000 2

Emmahuu424的博客 654

opencv简单小项目

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。要开始一个OpenCV项目,你需要安装OpenCV库,这通常可以通过Python的pip包管理器完成。替换为你要加载的图像的实际路径。这个例子展示了OpenCV项目的基本结构,你可以在此基础上添加更多的图像处理功能。如果你需要更详细的指导或代码示例,请告诉我你的具体需求。

youyouxiong的博客 972

c++学习笔记,移位运算符,原码,反码,补码

#include <iostream> int main() { uint a = 5; int b; int c; b = (-1) << 3; c = -1 ^ b; std::cout << "b:" << b << std::endl; std::cout <&l...

m0_37542524的博客 342

Ethercat学习-从站源码生成

移植平台GD32F450,从站芯片AX58100

西澳峰的博客 9217

奈曼-皮尔逊准则

奈曼-皮尔逊准则 如果各个假设的先验概率P(Hi)(i=0,1)P(H_i)(i=0,1)P(Hi​)(i=0,1)已知,并且每种判决的代价函数已知,这时,可以用贝叶斯准则进行判决。 如果进一步假设正确判决不付出的代价,而错误判决代价相同,即c00=c11=0,c01=c10=1c_{00}=c_{11}=0,c_{01}=c_{10}=1c00​=c11​=0,c01​=c10​=1,这时可以用最小平均错误概率准则进行判决。 在不知道先验概率P(Hi)(i=0,1)P(H_i)(i=0,1)P(Hi​)(

little_soldier的专栏 1万+

C++学习笔记(二)

sizeof是 C 和 C++ 中的一种运算符,用于计算数据类型或对象在内存中所占的字节数。它是一个编译时运算符,其结果在编译时就已经确定,不需要运行时计算。sizeof 的基本用法sizeof可以作用于数据类型或表达式。int a;// 返回 int 类型的字节数// 返回变量 a 的字节数sizeof 的常见用途sizeof常用于动态内存分配、数组操作和结构体对齐等场景。// 分配 10 个 int 的内存空间sizeof 的特殊情况对于数组,sizeof。

ShangguanLuli的博客 1081

基于Simulink的电力电子负载特性模拟仿真实例

电阻性负载是最简单的负载形式,其阻抗为纯电阻,电流和电压之间的关系符合欧姆定律。电阻性负载的特点是消耗能量,不会存储能量。本示例将以一个典型的直流电源供电系统为例,展示如何利用Simulink进行不同负载特性的仿真模拟。直流电源:提供固定电压输入。逆变器(可选):根据需要产生PWM调制信号,驱动负载。负载模块:模拟不同类型的负载特性,如电阻性负载、电感性负载和容性负载。测量模块:用于观察负载上的电压和电流波形。系统架构视图plaintext深色版本v| || |

xiaoheshang_123的博客 429

C++学习笔记(一) 位运算详解

C++学习笔记(一)   位运算详解 1.进行位运算时都是用数据的补码进行运算。 2.运算后得到的结果也是补码,需要将它转换成原码才能得到结果。

Doobe的博客 647

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c++笔记目录

二十二、常函数 & 常对象 & mutable。四十、算法-谓语predicate。二、原码、反码、补码的计算。一、二、八、十六进制转换。三十九、算法-函数对象。二十一、this指针。四十一、内建函数对象。

qq_49692308的博客 285

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++学习笔记(基础002--信息的存储方式)

本文为个人学习笔记,参考自:《C++程序设计(第4版)》 0.02 信息的存储方式 一、信息 计算机加工的对象是数据信息,而指挥计算机操作的是控制信息,因此计算机内部的信息可以分为两大类。 控制信息(指令、控制字) 数据信息(数字信息&lt;定点数、浮点数&gt;、非数值信息&lt;字符数据、逻辑数据&gt;) 人们最熟悉十进制数系,但是几乎所有的计算机采用的都是二进制数...

鳄鱼泪的博客 782

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【C++笔记】

C++笔记

qq_42657656的博客 1973

原码、反码、补码和移码(from 刘水镜)

在计算机系统中,数值一律用补码来表示(存储)。        主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 软考笔记——原码、反码、补码和移码其实很简单 最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、反码、补码和移码的定义如下

BTD-Winnie 4188

移位运算 and 原码、反码、补码

文章目录背景什么是移位运算,如何做int型变量在64位机器中占多少个二进制位移位前后数值的大小关系回到文章开头的题目 背景 在看《Absolute C++》时遇到的。判断以下代码的输出内容: int i=1; while (i<<=10) { cout << i << endl; i += 3; } 上面while判别式中i<<=10可不是小于或远小于的大小关系比较,而是移位运算的表达式,相当于i = i << 10。那么结果如何

ReaderWithNoEmotion 842

[狂神说]汇编语言笔记 数据宽度、有符号数无符号数\原码反码补码

数据宽度 计算机:内存!给数据增加数据宽度! C、C++和Java都需要定义数据的类型。计算机底层需要我们给这些数据定义宽度。 位: 0 1 字节:0-0xFF 字: 0-0xFFFF 双字:0-0xFFFFFFFF 在计算机中,每一个数据都需要给它定义类型。给它定义宽度。在内存中的宽度。 有符号数无符号数 数据都是有宽度的,每个数据代表什么意思呢?二进制 0 1 0 1 0 1 0 1 规则,二进制解码增加一个规则? 无符号数规则 你这个数字是什么,那就是什么 1 0 0

m0_60416689的博客 671

2024年C C++最新C语言原码,反码和补码转换详解_c语言补码转原码(1),2024年最新2024最新版

整数在数据中的储存方式是补码,所以如果要进行运算的话,那就需要将原码转换为补码再计算。如果是整数位(有符号整数)那么符号位就是1(不知道怎么来的话上面有图片),但是再内存中的储存是32bit,符号位是最高的一位,所以10的原码是。所以正数在内存中的储存情况就是原码,因为正数的原码反码补码都一致。符号位的描述如下,符号位0表示正数,1表示负数。原码就是把一个十进制的数转换为二进制的数字。正数的补码就是原码,同样不需要转换。比如:10的原码就是:1010。正数的反码就是原码,不需要转化。比如-10的原码就是。

2401_84978603的博客 639
上一篇: 【程序员面试金典】请编写一个方法,实现整数的乘法、减法和除法运算(这里的除指整除)。只允许使用加号。
下一篇: 【程序员面试金典】在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。
HelloZEX
博客等级 码龄11年 486粉丝 264原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值