gpt4 book ai didi

c - 在 C 中将 int 移位 32 次

转载 作者:太空狗 更新时间:2023-10-29 15:47:58 25 4
gpt4 key购买 nike

我有一个特定的 C 位移位场景,我认为 Stack Overflow 尚未涵盖该场景。 (如果是,我还没找到!)

本练习使用 signed int 作为数据类型。

取值 0x80000000(最高有效位仅为 1。)

在机器上使用算术右移将其右移一次(我的就是这样做的)。

结果 = 0xC0000000(最左边的字节为 1100 0000)。

继续移动它,你应该从左到右填满一个。

结果 = 0xFFFFFFFF(全部。)

但是:尝试相同的示例,但一起移动一个额外的位置:

0x80000000 >> 0x00000020(右移 32 次)

你的结果?我不知道。我的结果不是全部。事实上,我得到了 0x00000001,这不是我想要的行为。为什么是这样?它是特定于机器的吗?

(上下文:作业分配将我的操作限制为几个位运算符以解决难题。这是难题的一个方面,但远非整个问题。)

最佳答案

这是未定义的行为

Why doesn't left bit-shift, "<<", for 32-bit integers work as expected when used more than 32 times?

这意味着您应该像躲避瘟疫一样避开它。这里有一些链接,包括“每个 C 程序员都应该知道的未定义行为”:http://lwn.net/Articles/511767/

关于c - 在 C 中将 int 移位 32 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12145636/

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