gpt4 book ai didi

c - 按位移位说明

转载 作者:行者123 更新时间:2023-12-02 08:51:43 25 4
gpt4 key购买 nike

假设我有变量 x初始化为 425 .在二进制中,即110101001 .

将其向右移动 2 位,如下所示:int a = x >> 2; ,答案是:106 .在二进制中是 1101010 .这是有道理的,因为最右边的两个位被丢弃,两个零被添加到左侧。

将其向左移动 2 位,如下所示:int a = x << 2; ,答案是:1700 .在二进制中,这是 11010100100 .我不明白这是怎么回事。为什么保留最左边的两位?我怎样才能放下它们?

谢谢,

最佳答案

这是因为 int 在您的系统上可能是 32 位的。 (假设 x 是 int 类型。)

所以你的 425 实际上是:

0000 0000 0000 0000 0000 0001 1010 1001

当左移 2 位时,您会得到:

0000 0000 0000 0000 0000 0110 1010 0100

直到你一直超过 32 之前,什么都不会被转移。(严格来说,有符号整数的溢出是 C/C++ 中的未定义行为。)

要删除被移出的位,您需要对作为数字原始长度的掩码进行按位与操作:

int a = (425 << 2) & 0x1ff;  //  0x1ff is for 9 bits as the original length of the number.

关于c - 按位移位说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088315/

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