gpt4 book ai didi

language-agnostic - 如何使用按位运算设置或清除前 3 位?

转载 作者:行者123 更新时间:2023-12-04 02:51:28 24 4
gpt4 key购买 nike

假设我有一个类似 0x448 的号码.在二进制中,这是 0100 0100 1000 .

如何使用按位运算将位 1、2 和 3 设置为全 0 或全 1?当我说前三个时,我将最右边的位算作零位。

所以,例如

位为 1:

b12            b0 
0100 0100 1110
^^^

位为 0:
b12            b0
0100 0100 0000
^^^

我猜想将它们设置为 1 我使用位或掩码为 14 (0x000e)?但如果是这种情况,我该如何做类似的事情来清除这些位?

有关的:
  • How do you set, clear and toggle a single bit in C? (语法不同,但操作相同)
  • 最佳答案

    您的位设置正确:OR使用您要设置的位的掩码。

    位清除位非常相似:AND与您要清除的位的补码。

    示例:0x0448 的词.

    设置位 1、2 和 3 将为 Word OR 0x000e :

        0000 0100 0100 1000 = 0x0448
    OR 0000 0000 0000 1110 = 0x000e
    ---- ---- ---- ----
    = 0000 0100 0100 1110 = 0x044e

    清除位 1、2 和 3 将是 Word AND 0xfff1 :
        0000 0100 0100 1000 = 0x0448
    AND 1111 1111 1111 0001 = 0xfff1
    ---- ---- ---- ----
    = 0000 0100 0100 0000 = 0x0440

    详细说明补码,用于清除的 AND 模式是用于设置的 OR 模式的逻辑非(每个位颠倒):
     OR 0000 0000 0000 1110 = 0x000e
    AND 1111 1111 1111 0001 = 0xfff1

    这样您就可以使用您最喜欢的语言 NOT 操作,而不必计算出两个值。

    关于language-agnostic - 如何使用按位运算设置或清除前 3 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/750240/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com