位运算符
位:二进制简称“位”,是二进制计数系统中表示小于 2 的整数符号,一般用 1 或0表示,是具有相等概率的两种状态中的一种。二进制的位数可表示一个机器字的字长,一个二进制位包含的信息量称为 1 bit。(摘自百度百科)
位运算符用来对二进制位进行操作,Java中提供了如下所示的位运算符(操作数只能为整型和字符型数据):
& 按位与
| 按位或
^ 按位异或
~ 按位取反
除~以外,其余均为二元运算符。
一个字节 = 8bit(位)
一个 int 类型的数值占 32bit(位)
二进制换算示例
int i = 123;
10 进制 123 转为二进制后等于:1111011
完整补位后:
00000000 00000000 00000000 01111011
tips:全文使用的二进制为 32 位。
原码、反码和补码
二进制的最高位为符号位,1 表示负数,0 表示整数,其余位表示数的绝对值。
123 转为二进制补齐后为:00000000 00000000 00000000 01111011,这是 123 的原码。
负数 -123 的原码:100000000 00000000 00000000 01111011。
其中首位是符号位,0代表正数,1代表负数。
反码:正数的反码和原码相同,负数的反码是保留其符号位不变,其他位取反,(0 变1,1 变0)。
补码:正数的补码和原码相同,负数的补码为原码除符号位外取反 +1。
注意:整数在计算机中,是以补码的形式存储的。
正数对比
123 的原码:00000000 00000000 00000000 01111011
123 的反码:00000000 00000000 00000000 01111011
123 的补码:00000000 00000000 00000000 01111011
负数对比
-123 的原码:10000000 00000000 00000000 01111011
-123 的反码:11111111 11111111 11111111 10000100
-123 的补码:11111111 11111111 11111