GESP三级历年真题解析(原码、反码和补码)

四季读书网 1 0
GESP三级历年真题解析(原码、反码和补码)

GESP三级历年真题解析(原码、反码和补码) 第1张GESP三级历年真题解析(原码、反码和补码) 第2张

🧙‍♂️ 第7题:补码反推真身

1、📖 题目:

10110101 是补码 → 原数是多少?


2、🎬 故事

看到最高位是 1:

👉 说明是 负数!


3、🧮 步骤

① 取反

01001010

② +1

01001011 = 75

③👉 所以原数是 -75


4、✅ 答案

👉 B. -75


GESP三级历年真题解析(原码、反码和补码) 第3张

🌟 第9题:取反魔法(~ 的秘密)

1、📖 题目:哪个说法是错误的?


2、🎬 故事:黑白翻转魔法镜

(1)有一面神奇镜子 ~

👉 0 变 1 👉 1 变 0


(2)就像:

00000101(5)变成11111010

3、💡 关键知识

👉 在计算机中(补码):

~x = -(x + 1)

4、🧪 一个个验证

(1)✅ A:~5 = -6 ✔

~5 = -(5+1) = -6

(2)❌ B:~0 = 0 ❌(错!)

~0 = -1

👉 因为:

00000000 → 11111111 → -1

(3)✅ C:~(-3) = 2 ✔


(4)✅ D:~8 = -9 ✔


5、✅ 答案

👉 B(错误)


GESP三级历年真题解析(原码、反码和补码) 第4张

GESP三级历年真题解析(原码、反码和补码) 第5张

1、📘 题目

 unsigned int 占 2 字节,能表示的范围是?

正确答案:A:0 ~ 65535


2、🧮 计算:

(1)字节换算:

2 字节 = 16 位


(2)unsigned(无符号位)

最大值 = 2^16 - 1


A0 ~ 65535

3、🧠 知识点总结

 👉 unsigned:没有负数 👉 范围公式:2 ^ 位数 - 1


GESP三级历年真题解析(原码、反码和补码) 第6张

GESP三级历年真题解析(原码、反码和补码) 第7张

1、🟦 题目:

❓ char 的取值范围总是 -128 ~ 127 ❌ 错误


2、🧸 故事:char 是“善变的孩子”

 有的电脑:char 是 signed

有的电脑:char 是 unsigned


3、🧠 范围区别:

类型       
范围
signed char 
-128 ~ 127
unsigned cha
0 ~ 255

4、📌 记忆口诀

char 的范围看属性,

有符号的有正负,

无符号的无负数,

取值范围有变化。


GESP三级历年真题解析(原码、反码和补码) 第8张

GESP三级历年真题解析(原码、反码和补码) 第9张

1、🟦 题目:

这道题考查的是8位二进制原码表示法的最小整数。


2、什么是“原码”?

(1)原码是一种带符号整数的二进制表示法:

 ·正数的原码就是它的普通二进制形式,符号位为0;

·负数的原码是绝对值的二进制,符号位为1。


(2)例如:+5的原码是00000101,-5的原码是10000101


3、8位原码结构

(1)符号位(最高位):

0表示正数 1表示负数


(2)7位数值位:表示0到127

所以能表示的范围是: 正数:00000001到01111111→+1到+127

负数:10000001到11111111 →-1到-127

·注意:负零(10000000)存在,但它和正零(00000000)都表示0,不计入负数最小值


4、最小整数是多少?

 由于原码不能表示-128(这通常是补码能做到的),

所以原码的最小值是:-127

 正确答案是:A.-127


GESP三级历年真题解析(原码、反码和补码) 第10张

1、🟦 题目:

反码中,零的表示形式有几种?


2、什么是“反码”?

反码(ones'complement)是一种带符号二进制数的表示方法,规则如下: 正数的反码=它本身的二进制(符号位为0) 负数的反码=其正数原码除符号位外,各位取反,符号位为1


3、反码中“0”的表示方式

我们来看8位举例:


(1)正零:

00000000


(2)负零:

11111111


(3)区别:

正零就是普通的全0;

负零是正零的反码(不变符号位,其他取反)→所以变成全1。

正确答案是:B. 2种


GESP三级历年真题解析(原码、反码和补码) 第11张

GESP三级历年真题解析(原码、反码和补码) 第12张

1、🟦 题目:

补码10111011对应的真值是多少?


2、补码的规则

补码表示法下(8位):

如果首位是0,就是正数,数值直接转换。

如果首位是1,是负数,要先求“原码”,再取负数。


3、转换步骤

(1)我们要处理的是:

补码:10111011


(2)第一步:识别符号

最高位是1,说明这是一个负数。


(3)第二步:求原码

负数的原码=补码先按位取反+末位加1


(4)步骤一:按位取反(补码→反码)

 补码:10111011按位取反→01000100


(5)步骤二:反码+1→原码(二进制)

01000100+1=01000101


(6)转为十进制:

01000101 =69


(7)所以真值是:-69

 正确答案是:A.-69


4、拓展:快速判断负数补码真值的方法

 (1)对于一个8位补码:

如果是负数,直接用256 -值,再取负数。


(2)比如:

补码:10111011(二进制)  =  187(十进制) 真值  =  187 -256  =  -69 


GESP三级历年真题解析(原码、反码和补码) 第13张

1、🟦 题目:

补码的加法中,若最高位和次高位进位不同,说明?


2、本题考察的是:补码加法中的溢出判断规则。

补码加法中溢出的判断方法:

在进行补码加法时,如果最高位(符号位)发生了错误改变,即: 符号位的进位(即最高位进位)和次高位的进位不同,说明发生了溢出(overflow)。


 3、因此正确答案是:

B.发生上溢


4、溢出条件

(1)补码加法的溢出规则:

  1. 正数 + 正数
    :结果应为正数。若溢出,会变成负数(符号位为1)。
  2. 负数 + 负数
    :结果应为负数。若溢出,会变成正数(符号位为0)。
  3. 正数 + 负数
    :不会溢出(因为结果的绝对值不可能超过任一加数的绝对值)。

(2)关键点

溢出仅发生在符号位参与运算时,且符号位的进位(C_out)与次高位的进位(C_next)不同


(3)示例:正数 + 正数 → 溢出为负数

假设用4位补码表示(范围:-8到7):

  • +5
     的补码:0101
  • +3
     的补码:0011

(4)加法过程

  0101 (+5)+ 0011 (+3)---------  1000 (-8)  (错误结果!)

(5)实际结果+5 + +3 = +8,但4位补码无法表示+8(最大为+7),因此溢出为-81000)。


GESP三级历年真题解析(原码、反码和补码) 第14张

GESP三级历年真题解析(原码、反码和补码) 第15张


1、🟦 题目:

Base64编码中,如果输入字符串的长度为10字节,编码后的字符串长度是多少( )


2、题目中说明:

Base64 编码将每3字节的输入数据编码为 字节的输出数据。如果输入数据长度不是 的倍数,会用 号填充。


3、每3个字节(24位)被编码成4个字节(32位)。

如果输入数据长度不是3的倍数,则:

余1字节时,补2个=,编码结果占4个字节。

余2字节时,补1个=,编码结果占4个字节。


4、计算过程:

(1)输入长度为10字节。


(2)计算完整的3字节组数:

10÷3=3组,剩余1字节


(3)这3组完整的3字节数据会编码成:

3×4=12字节


   (4)  剩余1个字节,需要补2个=,因此会编码成4个字节。

总长度: 12+4=16字节


5、答案:D.16字节


GESP三级历年真题解析(原码、反码和补码) 第16张

1、🟦 题目:

在C++中,补码的主要作用是?


2、在C++中,补码的主要作用是:

 B.简化整数的加减法运算


3、解释:

补码是计算机中表示负数的一种方式。使用补码来表示整数时,整数的加法和减法运算可以通过相同的硬件电路进行处理,而不需要单独的加法器和减法器。这是因为加法器能够直接处理正负数的加法和减法,不需要额外的转换过程。


4、具体来说:

 正数和负数的加法与减法都可以使用相同的加法运算规则,极大简化了硬件设计。

补码的负数是通过将正数的每个位取反并加1来得到的,这使得加法器在处理正负数时变得简单高效。


GESP三级历年真题解析(原码、反码和补码) 第17张

GESP三级历年真题解析(原码、反码和补码) 第18张

GESP三级历年真题解析(原码、反码和补码) 第19张

GESP三级历年真题解析(原码、反码和补码) 第20张

1、🟦 题目:

[10000011]原=( )[10000011]补=( )分别是数字几?

2、计算过程

(1)计算[10000011]原 的十进制值

 ·二进制数:10000011

●符号位:1(表示负数)

●数值位:0000011

将数值位转换为十进制: 0000011(二进制) = 3 (十进制) 因此,[10000011]原表示的十进制数值为-3。


(2)计算[10000011]补的十进制值

 ·二进制数:10000011

●符号位:1(表示负数)


(3)补码的计算步骤: 

    第一步:取反(除符号位外,其余位取反):

10000011->11111100


   第二步:加1

11111100 +1=11111101


  第三步:将补码11111101转换为十进制:

符号位:1(表示负数)

数值位:1111101


第四部:将数值位转换为十进制:

1111101(二进制)=125(十进制)


 因此,[10000011]补表示的十进制数值为-125。


3、最终答案: B、-3   -125


GESP三级历年真题解析(原码、反码和补码) 第21张

1、🟦 题目:

关于计算机中的编码,下列说法中错误的是?


2、选项分析

 (1)A.对于无符号数,原码就是真值

分析:

无符号数没有符号位,所有位都用于表示数值。 因此,无符号数的原码就是其真值。 结论:正确。


(2)B.正数的反码是其本身

分析:

正数的反码与原码相同。 结论:正确。


(3)C.负数的反码和补码是不一样的

分析:

负数的反码是其原码的符号位不变,其余位取反。 负数的补码是其反码加1。 因此,负数的反码和补码是不同的。 结论:正确。


(4)D.负数的反码,在其原码的基础上,各个位取反

分析:

负数的反码是其原码的符号位不变,其余位取反。 题目中说“各个位取反”,包括符号位,这是错误的。结论:错误。


3、最终答案:D. 负数的反码,在其原码的基础上各个位取反


GESP三级历年真题解析(原码、反码和补码) 第22张

1、🟦 题目:

为了简化计算机基本运算电路,使加减法都只需要通过加法电路实现,这是使用补码的原因?


2.补码的核心特性:

 补码的核心特性是:一个数的补码加上另一个数的补码,结果仍然是这两个数的和的补码。这意味着: 加法和减法可以统一使用加法电路来实现 不需要额外的减法电路,简化了硬件设计。


3.补码的优势:

(1)统一加减法:

加法和减法都可以通过加法电路实现,简化了硬件设计。


(2)符号位处理:

补码的最高位是符号位(θ表示正数,1表示负数),符号位可以直接参与运算。


(3)溢出处理:

溢出结果仍然符合数学规律,无需额外处理。


(4)零的唯一表示:

补码中,0只有一种表示形式(全0)。


4、最终答案:正确✅️


GESP三级历年真题解析(原码、反码和补码) 第23张

1、🟦 题目:

使用原码进行的计算, 2+(-1) 的结果是 -3


2、加法运算

当使用原码进行加法运算时,直接将符号位和数字部分一起相加,但这种方法在处理负数时会导致问题。具体来说,当正数和负数相加时,符号位的处理并不符合数学上的加法规则,因此结果可能不正确。


3、现在,我们来尝试用原码计算2+(-1):

(1)将原码相加:

2的原码: 00000010

-1的原码:10000001

相加结果:10000011


(2)解读结果:

结果10000011的最高位是1,表示这是一个负数。

其余位0000011转换为十进制是3。

因此,结果解读为-3。


4、最终答案:正确✅️


GESP三级历年真题解析(原码、反码和补码) 第24张

1、🟦 题目:

反码计算加减法:加法与减法结果都是正确的,只是解决不了 -0 的问题


2、反码加减法:

 (1)加法:

当两个加数符号相同时,直接对它们的反码进行二进制加法,然后取结果的反码作为最终结果的补码(再转换为真值)。 当两个加数符号不同时,将绝对值较大的数的反码加到绝对值较小的数的反码上(考虑符号位),然后对结果取反码作为最终结果的补码。


(2)减法:

减法可以转换为加法,即a-b=a+(-b)。

因此,减法操作可以看作是对被减数和减数的反码(减数先取负,即取其反码)进行加法运算。


3、-0的问题

在反码表示中,0和-0的反码是相同的,都是000...0(对于n位二进制数)。这意味着在反码运算中,无法区分0和-0。 当两个正数相加得到0时,它们的反码相加后仍然是0,再取反码还是0,表示结果正确。


4、无法区分产生的问题:

由于反码无法区分0和-0,因此在某些情况下(特别是在涉及溢出和符号扩展的运算中),这种无法区分可能会导致问题。例如,在符号扩展时,我们通常需要保留数的符号位,但反码无法明确表示-0的符号,这可能导致运算结果的符号信息丢失或错误。


5、最终答案:正确✅️


抱歉,评论功能暂时关闭!