java byte[] 操作 java中byte类型怎么赋值

发布时间:2023-05-16 09:34:24

byte类型数据的范围

Java中byte类型数据的大小是一个字节,即8位,其范围为-128(1000_0000) ~ 127(0111_111),二进制最高位为符号位。

使用二进制形式赋值报错问题

给byte类型的变量赋值只能在-128~127范围内。

可采用二进制形式赋值,如:byte b = 0b10011; (b=19)。使用二进制赋值时,系统以补码的形式分析赋值的二进制数(例如0b10011是19;对于0b1111_1101则是-3)。

若要用二进制形式赋值一个负数,例如:byte b = 0b1001_0101;,编译器会报告类型不兼容的错误(int不能给byte赋值)。强制转换需要添加类型:byte b = (byte) 0b1001_0101;

原因:(参考:JAVAByte数据类型二进制赋值运算报错)

byte有8个比特位,其中最高位是符号位,给它赋值0b1001_0101当时,最高位1系统无法判断是实际值还是符号位值。添加强制类型转换(byte),系统可以知道1是符号位,此时可以赋值;如果没有强制类型转换,系统认为1是符号位。0b1001_0101是int类型数据。int类型值不能赋值byte变量,因此会报错。

byte以二进制的形式输出

byte以二进制的形式输出,可以包装Integer的静态方法toBinaryString(int i)

示例:

byte a = 2;byte b = 12;System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toBinaryString(b));101100*/**输出

但是,如果用这种方法输出负数byte变量,结果是输出32位二进制数,如:

byte a = -2;System.out.println(Integer.toBinaryString(a));/**输出:111111111111111111111111111111111111110*///

这是因为byte值被赋值toBinaryString()该方法被转换为int类型,即32位。上一个例子的正数也被转换为int,但因为它是正数,所以高0可以省略,所以它看起来正常显示;但对于负数,高1不能省略,所以以32位显示。

对于负数byte,可以截取结果的最后8位,如下:

public static void main(String[] args) throws IOException {    byte a = -2;    String aBinary = Integer.toBinaryString(a);    aBinary = aBinary.substring(aBinary.length()-8);    System.out.println(“原二进制数” + Integer.toBinaryString(a));    System.out.println(截取后的二进制数:" + aBinary);}/**输出:原二进制数:11111111111111111110截取后的二进制数:111110

一个Integer.toBinaryString()处理byte值(正数,左补0;对于负数,截取后8位)的例子:

public class Test {    public static void main(String[] args) throws IOException {        byte a = 2;        byte b = -2;        String aBinary = getBinaryByteStr(Integer.toBinaryString(a));        String bBinary = getBinaryByteStr(Integer.toBinaryString(b));        System.out.println(aBinary);        System.out.println(bBinary);    }    private static String getBinaryIntWithZero(String binary){        int zeroCount = 8 - binary.length();        String zeros = "";        if(zeroCount > 0){            for (int i = 0; i < zeroCount; i++) {                zeros += 0;            }        }        return zeros + binary;    }    /**     * 获取8位二进制形式     */    public static String getBinaryByteStr(String b){        if(b.length()>8){            return b.substring(b.length()-8);        }        else {            return getBinaryIntWithZero(b);        }    }}
上一篇 Springboot的控制层结合@PathVariable的使用
下一篇 Binder原理

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题