您的位置:首页 > 职场人生

黑马程序员——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中    

类 型

存储需求

取值范围

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 byte