笔试真题 | C有符号的变量和无符号的变量相加

有符号变数与无符号数相加

  1. 遵循的原则:
    • 将有符号数转化为无符号数;想当于取两个数的补码
  2. 代码实例

理解原码, 反码, 补码

类型 特征
机器数 带符号的二进制数
真值 去掉符号位的值
原码 符号位+真值
反码和补码 正数的反码和补码是其本身;
  1. 机器数和真值概念:

    • 机器数:

      • 一种带符号二进制表示形式
      • 为了方便: 我们用一个byte来计算
      +3 :  0000 0011;
      -3	:  1000 0011;
      
    • 真值:

      • 去掉符号位后表示的值, 就是真值;

      • 0000 0001 真值 = +000 0001 = +1;
        1000 0001 真值 = -000 0001 = -1;
        
  2. 理解原码的概念

    • 原码: 是符号位加上真值的绝对值

      [+1]原 = 0000 0001
      [-1]原	=	1000 0001 
      
    • 带符号的8位二进制数的取值范围就是

      [1111 1111 , 0111 1111]  ==   [-128 , 127]
      
  3. 理解反码的概念

    • 负数反码: 在原码的基础上符号位不变, 其余位取反(0/1);

    • 正数的反码: 是其本身;

      [+1] = [00000001]原 = [00000001]反
      [-1] = [10000001]原 = [11111110]反
      
  4. 理解补码的概念

    • 负数的补码: 在反码的基础上, 最后位进行加1

    • 正数的补码: 是其本身

      [+1] = [00000001]原 = [00000001]反 = [00000001]补
      [-1] = [10000001]原 = [11111110]反 = [11111111]补
      
  5. 关于负数

    • 其反码和补码都不能直接看出其数值;
    • 通常转化为原码才能看出;

为何要使用原码, 反码, 补码

  1. 为了让机器的计算只有加法没有减法?

    1. 如果使用原码相加 : 结果不正确

      1 - 1 = 1 + (-1) = [00000001]原

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

ARM/Linux嵌入式真题 文章被收录于专栏

让实战与真题助你offer满天飞!!! 每周更新!!! 励志做最全ARM/Linux嵌入式面试必考必会的题库。 励志讲清每一个知识点,找到每个问题最好的答案。 让你学懂,掌握,融会贯通。 因为技术知识工作中也会用到,所以踏实学习哦!!!

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务