如何在单个字节中替换指定4位数据而不修改其余4位?
单字节内替换高位4位数字(保留低位)
核心思路是先清除原字节的高4位,再将新的高位数字左移4位后,和保留的低位数字合并。
完整代码示例:
// 初始存储两个数字到单字节 byte firstNumber = 10; byte secondNumber = 15; byte bothNumbers = (byte) ((firstNumber << 4) | secondNumber); // 替换第一个数字为13,保留低位的15 firstNumber = 13; bothNumbers = (byte) ((firstNumber << 4) | (bothNumbers & 0x0F)); // 验证结果(可选) byte updatedFirst = (byte) ((bothNumbers >> 4) & 0x0F); byte unchangedSecond = (byte) (bothNumbers & 0x0F); // updatedFirst 结果为13,unchangedSecond 仍为15
如果需要替换低位数字同时保留高位,逻辑类似:用掩码0xF0清除低4位,再将新的低位数字和保留的高位合并:
// 替换第二个数字为12,保留高位的10 secondNumber = 12; bothNumbers = (byte) ((bothNumbers & 0xF0) | secondNumber);
原理说明
0x0F对应二进制00001111,与原字节做&操作会清零高4位,仅保留低4位。0xF0对应二进制11110000,与原字节做&操作会清零低4位,仅保留高4位。- 左移4位
<<4是将4位数字移动到字节的高半区;右移4位>>4则是把高半区数字移回低半区,再用&0x0F消除byte有符号类型带来的符号位干扰。
内容的提问来源于stack exchange,提问作者Greelings
相关产品推荐
相关产品推荐

