byte数据类型的初步入门

  1. 对于byte这个数据类型,因为应用的少,所以需要深入运用才能实践,1 byte = 8位二进制(实践证明:byte variable = 01100110,这样你就彻底错了,真正写byte类型的代码你就搞不定了),因为,二进制11111111对应的十进制是255,平常我们写代码时用的byte数据类型,就是存储的十进制的数,所以byte 变量 = 1到255之间的任何数是正确的,因为ASCII字符对应的十进制就是1到255,所以写代码的时候可以byte 变量 = 任何一个ASCII字符:
    Byte variable = (byte)168 printf(variable) 你猜输出什么?
    输出169 ,variable = 168
  2. ASCII码是人为对一些字符所编的号(从1到255),默认是十进制表示的,这个重要的认识说三遍,不然写代码的时候,会因这些弱智问题,让你烦写代码的。
  3. Int是32位,byte是8位,读别人的代码会经常看到:
    int variable = XXX;
    variable &0xff 是什么?
    0xff是16进制的0xff,十进制的255,二进制的1111 1111
    所以variable&0xff 是 :
    variable:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    0xff : _ _ _ _ _ _ _ _
    所以这个运算就是把变量variable的前3个高位清0,保留最后一个字节,而最后一个字节就是8位刚刚好可以把ASCII存储,所以就可以用该运算判断变量variable是不是ASCII,如果运算结果是0,说明该变量高位有值,就不是ASCII了,不是0就是ASCII了

  4. 我之前很想体会一下自己使用byte这个数据类型的体验,但是总体会不到,因为我觉得168这个数用byte,应该是0011100这样的一个数把,可惜不是,因为byte默认就是十进制,而且byte十进制存储还是1到255,所以说操作十进制1到255的时候,你想体会byte数据类型结果跟体会int一样去了,int就不说了,所以很失望,但是没事,你用byte存储256就看到效果了:
    这里写图片描述
    这里写图片描述

  5. 其实我们平时写代码有关byte数据类型的时候,最用到的还是byte数据类型和int,string,char之间的转换,因为在串口传输数据的时候就会遇到了:
    Int型32位byte型8位
    例如:int 类型:97
    则二进制表示为:00000000 00000000 00000000 01100001
    代码实现:
/*将int转为低字节在前,高字节在后的byte数组 
b[0] = 11111111(0xff) & 01100001 
b[1] = 11111111(0xff) & (n >> 8)00000000 
b[2] = 11111111(0xff) & (n >> 8)00000000 
b[3] = 11111111(0xff) & (n >> 8)00000000 
*/  
public byte[] IntToByteArray(int n) {    
        byte[] b = new byte[4];    
        b[0] = (byte) (n & 0xff);    
        b[1] = (byte) (n >> 8 & 0xff);    
        b[2] = (byte) (n >> 16 & 0xff);    
        b[3] = (byte) (n >> 24 & 0xff);    
        return b;    
}  
//将低字节在前转为int,高字节在后的byte数组(与IntToByteArray1想对应)  
public int ByteArrayToInt(byte[] bArr) {    
         if(bArr.length!=4){    
             return -1;    
         }    
         return (int) ((((bArr[3] & 0xff) << 24)      
                    | ((bArr[2] & 0xff) << 16)      
                    | ((bArr[1] & 0xff) << 8)  
| ((bArr[0] & 0xff) << 0)));     
}  

这个代码是看到别人的博客上写的,我第一看到的时候,欣喜若狂,明白了之前了想用byte variable = 101011011,这个想法的错误所在,一个byte存储8位0或1,也就是1到255,那么用两位不就是可以把101011011存下来了,也就是byte[2]就可以存储了,而且byte[0] = 1,byte[1] = 十进制的(101011011),有没有恍然大悟!
在看懂下面的这个图,你对byte数据类型就算入门了,后面我还要深入学习byte的8进制,16进制,学习单片机里用得到的byte


版权声明:本文为qq_21381465原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。