黑马程序员——java小结_001_byte字节
2014-09-07 21:00
211 查看
------- android培训、java培训、期待与您交流! ----------
byte不是一种新类型,在C++中byte被定义的是unsignedchar类型,也就是说C++中并没有定义byte这个类型,当然也就无法操作和计算.
但是在java中明确的给出了byte的定义,byte是一个很特殊的类型,它是java存储的最小单位只有一个字节,也就是8位.
这是否以为这我们在java中可以直接对byte类型的数据进行操作?
当然可以,例如:
byteb = 0;
b=b+1;
b+=1;
++b;
b=9+7;
等等,但是这些运算是常在C++里面运用的,在java中是否适用?
这个不一定!
再说byte字节运算前需要做些说明
首先:
1.在java中
2.java中的计算遵循这样4条准则
一.如果两个操作数中有一个是double类型,另一个操作数转换成为double类型
二.否则,如果其中一个是float类型,另一个转换成为float类型。
三.否则,如果其中一个是long类型,另一个转换成为long类型。
四. 否则,两个操作数都被转换成为int类型。
这里着重强调第四点,这里说的其实就是指short 、char和byte类型的。
知道了这些再来看上面的计算,咱倒着来讲,
首先b =9+7 这个简单来说就是给b初始化,不牵扯到计算,但是要注 意上面的表,这个是有范围的,如果你写成b=127+1 这是无法编译的,因为你超出了它的范围了
其次再来说++b 和 b+=1 这两个在C++中,你都可一把他们理解为b=b+1,但是根据java计算规则显示,byte运算都将被转换为int ,那么byte类型是怎样运算的呢?没错,其实还是int类型在运算,但是java编辑器做了另外一件事:类型强制转换及b=(byte)(b+1)。
那么综合上面两点,会产生一个问题:若 (byte)(b+1)超过-128 ~ 127这个范围怎么办?
这里我们简单举个例子
}
输出的结过是b = -128 c = 127
java的数字类型:正数在计算机中是以原码形式存在的,负数在计算机中是以其补码形式存在的
当数据从byte装换为int在转换为byte时,高位会丢失,并且强制截取低8位作为byte。
这种情况下就会发生一件有趣的事:
结果c =0;
也就是说每256是一个循环。
那么最后b=b+1 显然是错的,因为这时右边的b由于不确定显然可能造成溢出,而有没有显示的强转,当然就错误了。
------- android培训、java培训、期待与您交流! ----------
byte不是一种新类型,在C++中byte被定义的是unsignedchar类型,也就是说C++中并没有定义byte这个类型,当然也就无法操作和计算.
但是在java中明确的给出了byte的定义,byte是一个很特殊的类型,它是java存储的最小单位只有一个字节,也就是8位.
这是否以为这我们在java中可以直接对byte类型的数据进行操作?
当然可以,例如:
byteb = 0;
b=b+1;
b+=1;
++b;
b=9+7;
等等,但是这些运算是常在C++里面运用的,在java中是否适用?
这个不一定!
再说byte字节运算前需要做些说明
首先:
1.在java中
类 型 | 存储需求 | 取值范围 |
Int | 4字节 | -2147483648 ~ 2147483647(正好超过20亿) |
Short | 2字节 | -32678 ~32676 |
byte | 1字节 | -128 ~ 127 |
long | 8字节 | -9 233 372 036 854 774 808 ~ 9 223 372 036 854 775 807(不要以为这个数字很大,现实中超过int的数字很多,例如人口,财政等等) |
2.java中的计算遵循这样4条准则
一.如果两个操作数中有一个是double类型,另一个操作数转换成为double类型
二.否则,如果其中一个是float类型,另一个转换成为float类型。
三.否则,如果其中一个是long类型,另一个转换成为long类型。
四. 否则,两个操作数都被转换成为int类型。
这里着重强调第四点,这里说的其实就是指short 、char和byte类型的。
知道了这些再来看上面的计算,咱倒着来讲,
首先b =9+7 这个简单来说就是给b初始化,不牵扯到计算,但是要注 意上面的表,这个是有范围的,如果你写成b=127+1 这是无法编译的,因为你超出了它的范围了
其次再来说++b 和 b+=1 这两个在C++中,你都可一把他们理解为b=b+1,但是根据java计算规则显示,byte运算都将被转换为int ,那么byte类型是怎样运算的呢?没错,其实还是int类型在运算,但是java编辑器做了另外一件事:类型强制转换及b=(byte)(b+1)。
那么综合上面两点,会产生一个问题:若 (byte)(b+1)超过-128 ~ 127这个范围怎么办?
这里我们简单举个例子
public class Text { publicstatic void main(String[] args) { byteb = 127; b+=1; System.out.println(b); bytec =-128; c-=1; System.out.println(c); } }
}
输出的结过是b = -128 c = 127
java的数字类型:正数在计算机中是以原码形式存在的,负数在计算机中是以其补码形式存在的
当数据从byte装换为int在转换为byte时,高位会丢失,并且强制截取低8位作为byte。
这种情况下就会发生一件有趣的事:
public static void main(String[] args) { bytec =127; c=(byte)(c+127+2); System.out.println(c); }
结果c =0;
也就是说每256是一个循环。
那么最后b=b+1 显然是错的,因为这时右边的b由于不确定显然可能造成溢出,而有没有显示的强转,当然就错误了。
------- android培训、java培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员JAVA 001---008 小结
- 黑马程序员----JAVA----基础小结----
- 黑马程序员----JAVA----面向对象小结(2)----
- 黑马程序员 java基础--》 if语句与switch语句 小结
- 黑马程序员————Java5的枚举小结(第五篇)
- 黑马程序员_Java基础重点知识小结
- 黑马程序员——Java的IO流小结
- 黑马程序员——java小结_002_String类
- 黑马程序员——Java基础之集合框架小结
- 黑马程序员——java基础之内部类小结
- 黑马程序员_java常用类小结
- 黑马程序员----JAVA----集合小结(List)----
- 奋斗黑马程序员----Java之泛型小结
- 黑马程序员----JAVA----IO小结(3)
- 黑马程序员-java中io流小结
- 黑马程序员----JAVA ----基础小结----
- 黑马程序员----JAVA----IO小结(2)
- 奋斗黑马程序员----Java之字节流小结
- 黑马程序员_Java中的面向对象小结
- 黑马程序员 【】java学习之路——枚举小结