1、位运算
1.1 原码、反码、补码
- 计算机中所有数据的存储和运算都是以二进制补码的形式进行的。
- a —> 97,A —> 65,‘0’ —> 48

- 举例:5和-5,Java中int类型的数占4个字节,由于1字节(Byte)=8位(bit),所以int类型的数共占32位。其中第1位是符号位,该位为0表示正数,为1表示负数。其余31位是数值位。
- 原码:
5: 0000 0000 0000 0000 0000 0000 0000 0101
-5:1000 0000 0000 0000 0000 0000 0000 0101 - 反码:
5: 0000 0000 0000 0000 0000 0000 0000 0101
-5:1111 1111 1111 1111 1111 1111 1111 1010 - 补码:
5: 0000 0000 0000 0000 0000 0000 0000 0101
-5:1111 1111 1111 1111 1111 1111 1111 1011
- 原码:
- 结论:
- 正数的原码、反码、补码都是一样的。
- 负数的原码:把正数原码的第一位(符号位)0变成1。
- 负数的反码:把负数原码的符号位不变,数值位取反(0变成1,1变成0)。
- 负数的补码:负数反码加上1。
- 0: 0000 0000 0000 0000 0000 0000 0000 0000
- -0:1000 0000 0000 0000 0000 0000 0000 0000
1.2 位运算符
- Java中的位运算符一共有7个:
| 符号 | 含义 |
|---|---|
| & | 按位与,and。两个数字相同位上,同1为1,一0为0 |
| | | 按位或,or。两个数字相同位上,一1为1,同0为0 |
| ^ | 按位异或,xor。两个数字相同位上,相同为0,不同为1 |
| ~ | 按位取反,not。1变为0,0变为1 |
| << | 左移,shl。a << b表示把a的二进制数左移b位,最右边空出的b位用0补充。运算结果相当于a乘以2的b次方 |
| >> | 右移,shr。a >> b表示把a的二进制数右移b位,即去掉末尾的b位,最左边的b位补上原来的符号位(正数为0,负数为1)。若a为正数,运算结果相当于a除以2的b次方 |
| >>> | 无符号右移。a >>> b表示把a的二进制数右移b位,即去掉末尾的b位,最左边的b位补上0(无论正负都补0) |
int a = 5; // 0000 0000 0000 0000 0000 0000 0000 0101
int b

文章介绍了计算机中数据以二进制补码形式存储和运算,详细讲解了原码、反码和补码的概念,并列举了正负数的示例。接着,讨论了Java中的位运算符,如按位与、按位或、按位异或等。此外,文章还阐述了位运算在取模、判断奇偶性、交换变量值以及实现加法运算中的应用。
最低0.47元/天 解锁文章
1292

被折叠的 条评论
为什么被折叠?



