笔试真题 | C有符号的变量和无符号的变量相加
有符号变数与无符号数相加
- 遵循的原则:
- 将有符号数转化为无符号数;想当于取两个数的补码
- 代码实例
理解原码, 反码, 补码
机器数 | 带符号的二进制数 |
真值 | 去掉符号位的值 |
原码 | 符号位+真值 |
反码和补码 | 正数的反码和补码是其本身; |
-
机器数和真值概念:
-
机器数:
- 一种带符号的二进制表示形式
- 为了方便: 我们用一个byte来计算
+3 : 0000 0011; -3 : 1000 0011;
-
真值:
-
去掉符号位后表示的值, 就是真值;
-
0000 0001 真值 = +000 0001 = +1; 1000 0001 真值 = -000 0001 = -1;
-
-
-
理解原码的概念
-
原码: 是符号位加上真值的绝对值
[+1]原 = 0000 0001 [-1]原 = 1000 0001
-
带符号的8位二进制数的取值范围就是
[1111 1111 , 0111 1111] == [-128 , 127]
-
-
理解反码的概念
-
负数反码: 在原码的基础上符号位不变, 其余位取反(0/1);
-
正数的反码: 是其本身;
[+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反
-
-
理解补码的概念
-
负数的补码: 在反码的基础上, 最后位进行加1
-
正数的补码: 是其本身
[+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补
-
-
关于负数
- 其反码和补码都不能直接看出其数值;
- 通常转化为原码才能看出;
为何要使用原码, 反码, 补码
-
为了让机器的计算只有加法没有减法?
-
如果使用原码相加 : 结果不正确
1 - 1 = 1 + (-1) = [00000001]原
-
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
ARM/Linux嵌入式真题 文章被收录于专栏
让实战与真题助你offer满天飞!!! 每周更新!!! 励志做最全ARM/Linux嵌入式面试必考必会的题库。 励志讲清每一个知识点,找到每个问题最好的答案。 让你学懂,掌握,融会贯通。 因为技术知识工作中也会用到,所以踏实学习哦!!!