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(计算机编程语言)
1、在Java中,byte类型的数据是8位带符号的二进制数。最高位表示正负,0为正,1为负。
2、java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。
3、正数的最高位都是 0 ,正数的值就是二进制表示的值。
4、负数的最高位都是 1 ,负数的值是 取反后加一 然后加个负号得到的值。
扩展资料
1、java基本数据类型
JAVA中一共有八种基本数据类型,分别是byte、short、int、long、float、double、char、boolean。
2、java各数据类型取值范围
byte,整型,1个字节,范围:-2的7次方 ~ 2的7次方-1;
short,整型,2个字节,范围:-2的15次方 ~ 2的15次方-1;
int,整型,4个字节,范围:-2的31次方 ~ 2的31次方-1;
long,整型,8个字节,范围:-2的63次方 ~ 2的63次方-1;
float,浮点型,4个字节,范围:3.402823e+38 ~ 1.401298e-45;
double,浮点型,8个字节,范围:1.797693e+308~ 4.9000000e-324;
char,文本型,2个字节,范围:0~2的16次方-1;
boolean,布尔型,1个字节,范围:true/false;
参考资料
百度百科-java字符型
byte是java的基本数据类型,Java中byte是做为最小的数字来处理的,它的值域被定义为-128~127,也就是signed byte。
1、byte 数据类型是8位、有符号的,以二进制补码表示的整数;
2、最小值是 -128(-2^7);
3、最大值是 127(2^7-1);
4、默认值是 0;
5、byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
6、例子:byte a = 100,byte b = -50。
扩展资料
byte的常量包装类实例代码演示:
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
输出结果为:
基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
在今天,byte字节就是一个八位元组,使用其它位数的机器都进了博物馆。
java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。
不幸的是,byte的用作计数的时间远少于用表达基本内存单元的时间。比如从stream里读入一个双字节字符,我们先收到2个byte。为了把byte转换成适当的形式,需要对byte值做一些比较,比如判断字符集要比较其是否在某个编码范围内,比如GBK 0x8140~0xFEFE,然后new适当的string。
signed byte 把 0x00 ~ 0xff 映射成 0~127 -128~-1 两段,注意当与literal比较时,java自动将literal识别成int
可以用 下面的小程序来验证:
1 public class JavaByte
2 {
3 public static void main(String[] args)
4 {
5 byte b = 0;
6 for ( int i = 0; i <= 0xff; ++i )
7 {
8 b = (byte)i;
9 System.out.print(" "+i+":"+b+", ");
10 }
11 }
12 }
当收到(0xC7B0)这个GBK字符时,要判断 0x81 <= 0xC7 <= 0xFE 是否成立,实际变成判断 -127 < -57 < -2,唔,万幸,可以直接比较 low < ch < high。如果要判断 0x00 <= 0xC7 <= 0x80 (ASC Char),这回麻烦了,变成判断 (0 <= -57 <= 127) || ( 0x57 == -128 )。比较简单的办法用 (b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。
考虑到jvm里的byte其实也是32位的,所以在计划用byte的地方,直接用integer并不会有什么实际的损失,而 DataInputStream也提供了一个readUnsignedByte()方法返回的是int。所以真正的解决方案是忘掉byte,直接上 int。
至于为什么java没有unsigned数据类型,照下面这个interview里Jams Golsing的意思,应该是java应该简单而unsigned算术过于复杂了会让大多数程序员产生误解误用:
http://www.gotw.ca/publications/c_family_interview.htm
这着实是个问题,而且n年前就被人关注了,
http://www.darksleep.com/player/JavaAndUnsignedTypes.html