位运算符 #

一、位运算符概述 #

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)

十、总结 #

本章我们学习了:

  1. 按位运算:~、&、|、⊻
  2. 移位操作:<<、>>、>>>
  3. 位运算应用:权限、颜色、快速计算
  4. 位运算函数:count_ones、leading_zeros

接下来让我们学习Julia的赋值运算符!

最后更新:2026-03-27