&0xff 的作用
- Dominant language
- No language data
- Stars
- 1
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
对`Java`相关知识进行总结,涉及`框架`,**`源码`**,`项目开发`,`设计模式`,`并发设计`等。
## 源码
#### &0xff 的作用
> 1、 只是为了取得原值的低八位
eg:0x1234 & 0xff = 0001001000110100 & 0000000011111111 = 0000000000110100 = 0x34
注:如果取高位,常先用 ">>" 后再 "&0xff"
> 2、保证补码的一致性
```java
// 我们只关心二进制的机器数而不关注十进制的值,那么byte &0xff只是对其最低8位的复制;
// 通常配合逻辑或 "|"使用,达到字节的拼接,但无法保证其十进制真值能够不变。
public static void main(String[] args) {
// 首先计算机内的存储都是按照补码存储的:
byte b = -127;// 10000001 127二进制:01111111,-127:127取反加1,(1)10000001
int a = b;
// int a = b;将byte 类型提升为int时候,b的补码提升为 32位,补码的高位补1;
// 也就是1111 1111 1111 1111 1111 1111 1000 0001
System.out.println(a); //输出结果-127
//如果我们关心的不是十进制数有没有变,而是补码有没有变,这时候需要&上0xff。
a = b & 0xff;
System.out.println(a); //输出结果129
}
// 当 byte -> int 能保证十进制数不变,但是有些时候比如将文件流转为byte数组时候,
// 我们关心的不是十进制数有没有变,而是补码有没有变,这时候需要&上0xff。
// 将byte转为int 高24位必将补1,此时补码显然发生变化,在与上0xff,将高24重新置0
// 这样能保证补码的一致性,当然由于符号位发生变化,表示的十进制数就会变了。
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.