首页 > 试题广场 > 以下 b 的值是: byte b = (byte)129;
[单选题]

以下 b 的值是: byte b = (byte)129;

  • -126
  • -127
  • -128
  • -129

4个回答

添加回答
推荐

答案是B。
因为byte是有符号单字节整形,所以存储数字范围是[-128·127]
而127[01111111]+1==128[10000000]。
为什么呢?
因为科学家定义数字的时候是一个环,最大的数字后面就是最小,这样才可以把[0·255]分配给[-128·127]。
底层就是补码的概念。
好,我们再从java程序上运行一次。

public class HelloWorld {
    public static void main(String []args) {
       byte b = (byte)129;
       byte c = (byte)128;
       System.out.println(b);
       System.out.println(c);
    }
}
编辑于 2019-04-25 14:20:41 回复(2)
选B。考察的是数据类型转换。
129 int类型(4个字节)二进制: 00000000 00000000 00000000 10000001
在计算机系统中,数值一律用补码来表示(存储),正数的补码和源码相同
  1. int -> byte(1个字节),截取: 10000001
  2. 补码转反码:1开始则为负数,负数得到反码是末位-1: 10000000
  3. 负数的反码转原码(最高位即符号位不变):11111111
  4. 转换为十进制:-(27-1)=-127

编辑于 2019-04-24 16:36:04 回复(0)

选B
看到byte关键字应当知道这是一道Java试题。首先回顾一下,在Java中,byte类型的变量是八位带符号(注意这点)的二进制整数,它的可表示范围为[-128, 127]。题中这条语句的功能是声明一个byte类型的变量b,并将其初始化

显然,整数129并不在它的可表示范围中,但注意数字前面有一个(byte),其作用是强制类型转换,表示将整数129强制转换为byte类型的数据。

学过计算机组成原理后,我们知道在计算机中各种各样的数据都是用0和1组成的二进制序列表示的,对同一二进制序列,用不同的表示方法(原码、反码、补码等),它的值可能不同。计算机内存中通常是以补码作为数据的表示方式。数129的补码表示为1000 00001,当它被显式强制类型转换成byte后,变量b的表示值应为-127(byte类型是有符号的,故二进制的最高位1表示这是一个负数,除去符号位其余各位按位取反再加1的值为其绝对值127,两者组合在一起即为-127)。

可通过以下代码验证:

public class Test {
    public static void main() {
        byte b = (byte)129;
        System.out.println(b);
    }
}

故答案选B

编辑于 2019-04-24 16:04:40 回复(0)
B
1000 0001 这是 129的二进制表示
在byte中他表示-127
这里的第一位1表示-128加上1表示-127
编辑于 2017-02-05 15:40:01 回复(1)