位运算符 #
一、位运算符概述 #
1.1 运算符列表 #
| 运算符 | 名称 | 描述 |
|---|---|---|
~ |
按位非 | 翻转所有位 |
& |
按位与 | 两位都为1时结果为1 |
| |
按位或 | 任一位为1时结果为1 |
⊻ |
按位异或 | 两位不同时结果为1 |
>>> |
逻辑右移 | 高位补0 |
>> |
算术右移 | 高位补符号位 |
<< |
左移 | 低位补0 |
1.2 基本示例 #
julia
x = 0b1010
~x
x & 0b1100
x | 0b0101
x ⊻ 0b1111
x << 2
x >> 1
二、按位非 (~) #
2.1 基本操作 #
julia
~0b0000
~0b1111
~0b1010
2.2 整数应用 #
julia
~0
~1
~(-1)
三、按位与 (&) #
3.1 基本操作 #
julia
0b1010 & 0b1100
0b1111 & 0b1010
0b0000 & 0b1111
3.2 掩码应用 #
julia
x = 0b11010110
mask = 0b00001111
x & mask
3.3 检查位 #
julia
x = 0b1010
(x & 0b1000) != 0
(x & 0b0100) != 0
四、按位或 (|) #
4.1 基本操作 #
julia
0b1010 | 0b1100
0b0000 | 0b1111
0b1010 | 0b0101
4.2 设置位 #
julia
x = 0b1010
x | 0b0100
x | 0b0001
五、按位异或 (⊻) #
5.1 基本操作 #
julia
0b1010 ⊻ 0b1100
0b1111 ⊻ 0b1111
0b1010 ⊻ 0b0000
5.2 翻转位 #
julia
x = 0b1010
x ⊻ 0b1111
5.3 交换值 #
julia
a = 5
b = 3
a = a ⊻ b
b = a ⊻ b
a = a ⊻ b
六、移位操作 #
6.1 左移 (<<) #
julia
0b0001 << 1
0b0001 << 2
0b0001 << 3
1 << 10
6.2 右移 (>>) #
julia
0b1000 >> 1
0b1000 >> 2
0b1000 >> 3
1024 >> 5
6.3 算术右移 vs 逻辑右移 #
julia
x = -8
x >> 2
x >>> 2
七、位运算应用 #
7.1 权限系统 #
julia
const READ = 1 << 0
const WRITE = 1 << 1
const EXECUTE = 1 << 2
permissions = READ | WRITE
has_permission(p, flag) = (p & flag) != 0
has_permission(permissions, READ)
has_permission(permissions, EXECUTE)
permissions |= EXECUTE
has_permission(permissions, EXECUTE)
permissions ⊻= WRITE
has_permission(permissions, WRITE)
7.2 颜色处理 #
julia
function rgb_to_int(r, g, b)
(r << 16) | (g << 8) | b
end
function int_to_rgb(color)
r = (color >> 16) & 0xFF
g = (color >> 8) & 0xFF
b = color & 0xFF
return (r, g, b)
end
color = rgb_to_int(255, 128, 64)
int_to_rgb(color)
7.3 快速计算 #
julia
x * 2 == x << 1
x * 4 == x << 2
x ÷ 2 == x >> 1
x ÷ 4 == x >> 2
x % 2 == x & 1
x % 4 == x & 3
x % 8 == x & 7
八、位运算函数 #
8.1 count_ones #
julia
count_ones(0b1010)
count_ones(0b1111)
count_ones(255)
8.2 count_zeros #
julia
count_zeros(0b1010)
count_zeros(0b0000)
8.3 leading_zeros #
julia
leading_zeros(0b0001)
leading_zeros(0b1000)
8.4 trailing_zeros #
julia
trailing_zeros(0b1000)
trailing_zeros(0b0001)
九、实践练习 #
9.1 练习1:位计数 #
julia
function bit_count(n)
count = 0
while n > 0
count += n & 1
n >>= 1
end
return count
end
bit_count(0b1010)
bit_count(0b1111)
9.2 练习2:判断2的幂 #
julia
function is_power_of_two(n)
n > 0 && (n & (n - 1)) == 0
end
is_power_of_two(1)
is_power_of_two(2)
is_power_of_two(3)
is_power_of_two(4)
9.3 练习3:位反转 #
julia
function reverse_bits(n, bits=8)
result = 0
for _ in 1:bits
result = (result << 1) | (n & 1)
n >>= 1
end
return result
end
reverse_bits(0b1010)
十、总结 #
本章我们学习了:
- 按位运算:~、&、|、⊻
- 移位操作:<<、>>、>>>
- 位运算应用:权限、颜色、快速计算
- 位运算函数:count_ones、leading_zeros
接下来让我们学习Julia的赋值运算符!
最后更新:2026-03-27