num = 1 之间的功能差异 << 4 and num |= 1 << 4

问题描述 投票:0回答:1

因此,如果我正确理解按位运算,

num = 1 << 4
通过在数字的 lsb 一侧添加 0,将 1 向左移动 4 个位置,如果有 1,则将其更改为 0。

但是如果我这样做

num |= 1 << 4
,它是把 1 与正在移动到的位置上的位进行“或”,还是将 0 与途中的位进行“或”?

我知道使用 |= 可以保持 1 的完整性,但我只想知道其功能

c bit-manipulation
1个回答
0
投票

您对按位运算的理解是正确的。

在表达式

num |= 1 << 4
中,
<<
运算符将
1
向左移动四个位置,就像在
num = 1 << 4
中一样。因此,它会产生二进制的
00010000

|
运算符执行按位或运算。当您使用
num |= 1 << 4
时,它可以有效地将 num 中的现有位与值 1 << 4. It doesn't change any bits that are already set to 1 in num. It only changes the bit at the fourth position from the right (counting from
0
) 到
1
中的位进行或运算,因为它是
1 << 4
中设置的唯一位。

其工作原理如下:

  • num 的初始值:假设 num 最初是二进制的

    00101010

  • 1 << 4
    结果为
    00010000

  • |
    运算执行按位或,因此得到
    num
    ,并将右数第四位设置为
    1
    ,所有其他位保持不变。

  • 所以,

    num
    的最终值将是
    00111010

  • 如果你这样做了

    num = 1 << 4
    num
    的值就会变成
    00010000

综上所述,

num |= 1 << 4
将指定位置的位设置为1,而不改变num中的其他位。

© www.soinside.com 2019 - 2024. All rights reserved.