GESP C++等级认证三级15-原码反码补码2-2

3 补码

3.1 加法计算

使用补码即能解决正整数与负整数相加问题,又能提高计算效率。正整数的补码与其原码相同,负整数的补码在其原码的基础上加1,如图6所示。

图6 使用补码实现正整数与负整数相加

其中,得到的结果如果超过8位,则舍弃超过8位的数值。因此,通过补码计算5+(-3)的结果是00000010,即2。

相关链接2 求负数补码的方法,除了上文介绍的反码加1外,还可以在其原码中从右向左找到第一个1,之后,将个1左边的所有数值位取反,符号位不变。

3.2 取值范围

对于8位二进制补码,0-127分别用"0000 0000"-"0111 1111"表示,-127到-1分别用"1000 0001"-"1111 1111"表示。多出来的一个补码"1000 0000"用来表示-128,因此8位二进制补码的取值范围是-128-127,并且还解决了原码与反码中存在+0和-0的问题。

4 真题解析

4.1 2025年6月

在"1.3 取值范围"中提到,8位二进制原码的取值范围是-127-127,因此本题选A。

4.2 2025年6月

在"2.3 取值范围"中提到,反码存在+0和-0两种表示方式,因此本题选B。

4.3 2025年6月

在"3.1 加法计算"中提到,负数补码的计算方式是反码加1,因此已知反码求补码的方法就是补码减1,所以本题中的反码是1011 1010,而在"2.1 表示方式"中提到,负数的反码是除符号位外的所有数值位取反,因此已知反码求原码的方式也是除符号位外的所有数值位取反,即可得到原码。因此补码1011 1010对应的原码是1100 0101,也就是-69,本题答案选A。

相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
weilx12343 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
Smileyqp沛沛3 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·3 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法