Java 字节操作

Class ByteUtils{

    public static int bytes2Int( byte[] bytes ){
    int num =bytes[3]&0xFF;
    num | =( (bytes[2]<<8) ) & 0xFF00);
    num | =( (bytes[1]<<16) ) & 0xFF0000);
    num | =( (bytes[0]<<24) ) & 0xFF000000);
}


    public static byte[] int2Bytes( int num ){
    byte[] byte = new btye[4];
   // byte[0] =( num&0xFF000000)>>24;
    //byte[1] =( num&0x00FF0000)>>16;
    //byte[2] =( num&0x0000FF00)>>8;
    //byte[3] =( num&0x000000FF);
    byte[0]=(byte) ( (i>>24)&0xFF);
    byte[1]=(byte) ( (i>>16)&0xFF);
    byte[2]=(byte) ( (i>>8)&0xFF);
    byte[3]=(byte)  (i&0xFF);
    
    return byte;

}
}
ava中只有char类型是无符号的是吗



8为二进制0000 0000

2.二进制在计算机中以补码形式存在
正数的补码就是它本身
负数的补码是对应正数的原码取反加1得到

3.-1的补码是 1的原码0000 0001 取反加1就是 1111 1111

4.unsigned是无符号数,把1111 1111看成正数 255 因为255的二进制为(1111 1111)



你RGBA,每个一个字节,java里面没有无符号,还要
byte b = read();
int blue = ((int)b) & 0xff;
否则直接用b的话,是 [-128,127]的范围,要这么转一下才行,烦

int blue = ((int)b) & 0xff;   255
int blue = ((int)b)有什么区别么?  -1  

不 & 0xff的话,255会变成-1





java为什么经常用int不用short

jvm指令集是基于int的,你用short也要转成int 如果用int那么就一个指令iinc,用short的话需要iload,iconst_`1,iadd,i2s,istore,


你用short或者byte进行运算,到最后JVM还是给他当成int。栈帧里每个slot都是32位。不浪费,前提是局部变量运算。


如何让一个字节的数据取值范围可以是0~255? 在JAVA里byte的范围是-128~127,不符合我的要求的。请问怎么样才能实现呢?

如何让一个字节的数据取值范围可以是0~255? 在JAVA里byte的范围是-128~127,不符合我的要求的。请问怎么样才能实现呢?


如何让一个字节的数据取值范围可以是0~255? 在JAVA里byte的范围是-128~127,不符合我的要求的。请问怎么样才能实现呢?







ava中只有char类型是无符号的是吗



8为二进制0000 0000

2.二进制在计算机中以补码形式存在
正数的补码就是它本身
负数的补码是对应正数的原码取反加1得到

3.-1的补码是 1的原码0000 0001 取反加1就是 1111 1111

4.unsigned是无符号数,把1111 1111看成正数 255 因为255的二进制为(1111 1111)



你RGBA,每个一个字节,java里面没有无符号,还要
byte b = read();
int blue = ((int)b) & 0xff;
否则直接用b的话,是 [-128,127]的范围,要这么转一下才行,烦

int blue = ((int)b) & 0xff;   255
int blue = ((int)b)有什么区别么?  -1  

不 & 0xff的话,255会变成-1





java为什么经常用int不用short

jvm指令集是基于int的,你用short也要转成int 如果用int那么就一个指令iinc,用short的话需要iload,iconst_`1,iadd,i2s,istore,


你用short或者byte进行运算,到最后JVM还是给他当成int。栈帧里每个slot都是32位。不浪费,前提是局部变量运算。


如何让一个字节的数据取值范围可以是0~255? 在JAVA里byte的范围是-128~127,不符合我的要求的。请问怎么样才能实现呢?


ava中只有char类型是无符号的是吗



8为二进制0000 0000

2.二进制在计算机中以补码形式存在
正数的补码就是它本身
负数的补码是对应正数的原码取反加1得到

3.-1的补码是 1的原码0000 0001 取反加1就是 1111 1111

4.unsigned是无符号数,把1111 1111看成正数 255 因为255的二进制为(1111 1111)



你RGBA,每个一个字节,java里面没有无符号,还要
byte b = read();
int blue = ((int)b) & 0xff;
否则直接用b的话,是 [-128,127]的范围,要这么转一下才行,烦

int blue = ((int)b) & 0xff;   255
int blue = ((int)b)有什么区别么?  -1  

不 & 0xff的话,255会变成-1





java为什么经常用int不用short

jvm指令集是基于int的,你用short也要转成int 如果用int那么就一个指令iinc,用short的话需要iload,iconst_`1,iadd,i2s,istore,


你用short或者byte进行运算,到最后JVM还是给他当成int。栈帧里每个slot都是32位。不浪费,前提是局部变量运算。


如何让一个字节的数据取值范围可以是0~255? 在JAVA里byte的范围是-128~127,不符合我的要求的。请问怎么样才能实现呢?

如何让一个字节的数据取值范围可以是0~255? 在JAVA里byte的范围是-128~127,不符合我的要求的。请问怎么样才能实现呢?

猜你喜欢

转载自blog.csdn.net/qq_41641296/article/details/80999270