黑马程序员——java小结_001_byte字节

本文详细解析了Java中byte类型的定义、特点及其在数据操作与计算中的规则,包括类型转换、范围限制以及如何正确进行加减运算。

------- 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培训、期待与您交流! ----------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值