首页 > 试题广场 >

两个二进制有符号数相加,00111111 + 1110111

[单选题]
两个二进制有符号数相加,00111111 + 11101111的十进制结果是( )。

  • 302
  • 47
  • 45
  • 46
推荐
正确答案应该选D.46
解答如下(Java):
byte a = (byte) 0b00111111;
byte b = (byte) 0b11101111;
System.out.println(a); // 63
System.out.println(b); // -17
System.out.println(a + b); // 46
// 综上,从编程角度,把二进制数0b00111111和0b11101111强制转型成byte即可
// 但是从计算机原理角度,考察的是原码、反码、补码的认识。
// 正数 原码=反码=补码
// 负数 反码=原码各位取反 符号位保留不变,反码末位+1为补码
// 因此,0b00111111是有符号二进制正数,转化成十进制正数就是63
// 而0b11101111是有符号二进制负数,补码变成反码要先减去1,然后反码变成原码要各位取反符号位保留,所以最终是0b11101111变0b11101110变0b10010001,最终结果是-17。
// 所以答案是63 + (-17) = 46。
编辑于 2019-06-17 14:13:15 回复(1)
选D。该题考察的是有符号二进制的运算转化十进制。
根据题目:
  • 加数00111111为正数,转为十进制为63
  • 加数11101111为负数,转化为十进制的步骤:第一步 先减1,得出11101110;第二步 再取反,得出00010001;第三步 转化为十进制后,加上负号,得出-17
  • 所以最终结果为:63+(-17)= 46
发表于 2019-06-14 21:08:44 回复(1)
发表于 2021-06-23 17:29:33 回复(0)

原码反码补码

  • 原码是指将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式

  • 反码表示规则:

    • 如果是正数,则表示方法和原码一样
    • 如果是负数,符号位不变,其余各位取反
  • 补码是计算机表示数据的一般方式,表示规则:

    • 如果是正数,则表示方法和原码一样
    • 如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)
  • 以8位计算机为例

    • 6的原码:0000 0110
    • -6的原码:1000 0110
    • 6的反码:0000 0110
    • -6的反码:1111 1001
    • 6的补码:0000 0110
    • -6的补码:1111 1010
    • 0的反码、补码都为零
  • 正数:原码 = 反码 = 补码

  • 负数:原码 = 除符号位反码取反,补码=反码+1


  • 按照以上所述:
    • 00111111:补码,符号位是0,正数,所以原码也是00111111,直接算63
    • 11101111:补码,符号位是1,负数,先求反码,加1得11101110,再求原码,取反数值位得10010001,算数值位为17,加上符号位是1,所以是-17
    • 63-17 = 46
发表于 2020-09-29 21:21:36 回复(0)