java中byte变量的范围问题

Python019

java中byte变量的范围问题,第1张

byte是一个字节,其中有8位,取值范围为

-128~+127,闭区间

因为有符号,所以符号位占一位

-128的二进制位

1000

0000

也就是0X80

这个不叫溢出。。是不是你看错了

+127就是

0111

1111

也就是0X7F。。

Java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。

byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数。

在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在Java中,byte类型的取值范围也是[-128, 127]。

运算规则:

####正数的最高位都是 0 ,正数的值就是二进制表示的值。 ####

####负数的最高位都是 1 ,负数的值是 取反后加一 然后加个负号得到得值。 ####

用8位的二进制来说明此规则:

比如:00000001。最高位是0 为正数 ,那么表示的就是 十进制的 1。

再比如:10000001.最高位是1 为负数,值是多少?取反得到 01111110 加1 得到 01111111 ,那么值为 -127

理解此运算规则我们正式开始说byte,byte正好是8位的二进制数。short是16位 int是32位 long是64位。

上述代码,最后会输出-56。原因如下:

200的二进制表示是111001000,由于int是32位的二进制,所以在计算机中,实际上是00000000000??111001000,当int转成byte的时候,那么计算机会只保留最后8位,即11001000。

然后11001000的最高位是1,那么表示是一个负数,而负数在计算机中都是以补码的形式保存的,所以我们计算11001000的原码为00111000,即56,所以11001000表示的是-56,所以最后test的值为-56。

扩展资料

Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。

在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。

因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。

参考资料来源:百度百科—Java(计算机编程语言)