& 0xFF 作用 取低8位

简介: & 0xFF 作用 取低8位

& 0xFF 取低8位

@Test
void byteTest() {
    byte hex1 = (byte) 127;
    byte hex2 = (byte) 383;
    byte hex3 = (byte) 0x7F;
    RandomAccessFile writeFile = null;
    try {
        //写入头文件
        writeFile = new RandomAccessFile("D:\\temp\\hex.txt", "rw");
        byte[] bytes = new byte[3];
        bytes[0] = hex1;
        bytes[1] = hex2;
        bytes[2] = hex3;
        writeFile.write(bytes, 0, bytes.length);
    } catch (Exception ex) {
        logger.error(ex.getMessage(), ex);
    } finally {
        try {
            if (writeFile != null) {
                writeFile.close();
            }
        } catch (Exception ex) {
        }
    }
    logger.info("成功");
}

 

@Test
void lowerOrderTest() {
    // 65304 = 1111 1111 0001 1000
    int h1 = ((65304));  //直接返回原数据 => 65304
    int h2 = ((65304 >> 4)); //右移4位,高位补0 => 0000 1111 1111 0001 => 1111 1111 0001 => 4081
    /**
     *  取低8位(FF)
     *  0xFFF = 11111111
     *  & 相同数为1 不同数为0
     *  1111 1111 0001 1000
     *            1111 1111
     *  0000 0000 0001 1000
     *  11000 => 24
     */
    int h3 = ((65304) & 0xFF);
    /**
     *  >> 4  先右移4位, 高位补0
     *  1111 1111 0001 1000
     *  0000 1111 1111 0001
     *  & 0xFF 取低8位
     *  0000 1111 1111 0001
     *            1111 1111
     *  0000 0000 1111 0001
     *  11110001 => 241
     */
    int h4 = ((65304 >> 4) & 0xFF);
    logger.info("\n{}\n{}\n{}\n{}",h1,h2,h3,h4);
}

short、int 转byte数组

/**
 * 32536 => 0111 1111 0001 1000 最左边为符号位
 * 默认从低位到高位的顺序取值
 * b[0] = 111 1111 0001 1000 & 0xFF = 0001 1000 = 24
 * b[1] = 111 1111 0001 1000 >> 8 & 0xFF = 0111 1111 = 127
*/
public static byte[] shortToBytes(short shortValue, ByteOrder byteOrder) {
    byte[] b = new byte[Short.BYTES];
    if (ByteOrder.LITTLE_ENDIAN == byteOrder) {
        b[0] = (byte) (shortValue & 0xFF);
        b[1] = (byte) ((shortValue >> Byte.SIZE) & 0xff);
    } else {
        b[1] = (byte) (shortValue & 0xFF);
        b[0] = (byte) ((shortValue >> Byte.SIZE) & 0xff);
    }
    return b;
}
/**
 * int 转 byte 同理
*/
public static byte[] intToBytes(int intValue, ByteOrder byteOrder) {
    if (ByteOrder.LITTLE_ENDIAN == byteOrder) {
        return new byte[]{
                (byte) (intValue & 0xFF),
                (byte) ((intValue >> 8) & 0xFF),
                (byte) ((intValue >> 16) & 0xFF),
                (byte) ((intValue >> 24) & 0xFF)
        };
    } else {
        return new byte[]{
                (byte) ((intValue >> 24) & 0xFF),
                (byte) ((intValue >> 16) & 0xFF),
                (byte) ((intValue >> 8) & 0xFF),
                (byte) (intValue & 0xFF)
        };
    } 
}
目录
相关文章
|
3月前
|
存储
经典面试题:写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个 复制 #define MIN(a,b) ((a)<=(b)?(a):(b))
你的宏定义已非常接近标准。以下是改进后的 `MIN` 宏定义,支持多种数据类型并避免副作用:
|
5月前
|
Java
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
这篇文章解释了Java中`int`基本数据类型和其包装类`Integer`之间的区别,并指出在进行`==`运算时,`Integer`会拆箱为`int`类型,然后比较它们的值是否相等。
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
|
数据可视化 数据管理 数据处理
编码集的作用?
编码集的作用?
|
8月前
|
存储 C++ 容器
在C++的set的作用类型
在C++的set的作用类型
56 0
|
8月前
|
JavaScript 算法
v-for中key的原理和作用
为什么在使用v-for循环渲染列表时,应始终为每个列表项提供一个唯一的key属性? `使用v-for时加上key属性是为了提高渲染列表时的性能和效率。`
|
8月前
|
存储 C语言
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
79 0
|
C语言
C中的数据类型封装机制—void万能类型
C中的数据类型封装机制—void万能类型
63 0
|
存储 数据挖掘 数据库
data的含义与作用及使用方法
data的含义与作用及使用方法
6452 0
|
算法 Java API
【算法】字符串转int类型思路及代码
【算法】字符串转int类型思路及代码
170 0
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象