gpt4 book ai didi

c - 长型 64 位 linux

转载 作者:IT王子 更新时间:2023-10-29 01:14:13 28 4
gpt4 key购买 nike

非常简单的问题,伙计们,但也许我只是忘记了什么。在 64 位 linux 中,long 是 8bytes 正确吗?如果是这样,并且我想设置第 64 位,我可以执行以下操作:

unsigned long num = 1<<63;

然而,每当我编译它时,它都会给我一个错误,说我左移的幅度超过了宽度。另外,如果我想获取 long 类型的前 32 位(没有符号扩展),我可以这样做吗:

num = num&0xFFFFFFFF;

或者关于:

num = (int)(num);

谢谢。

最佳答案

In 64bit linux, a long is 8bytes correct?

不必。取决于编译器而不是底层操作系统。检查这个以获得很好的讨论。 What decides the sizeof an integer?

Whenever I compile this, however, it gives me an error saying that I'm left shifting by more than the width

这个大家都已经回答过了。使用 1UL

Also, if I wanted to take the first 32bits of a long type (without sign extension), can I do:

num = num&0xFFFFFFFF;
or what about:

num = (int)(num);

num = num&0xFFFFFFFF。这将为您提供较低的 32 位。但请注意,如果 long 在您的系统上只有 4 个字节,那么您将得到完整的数字。来到符号扩展部分,如果您使用的是 long 而不是 unsigned long,那么您不能取消符号扩展位。例如,-1表示为全1,从第0位开始。您将如何通过屏蔽来避免这些问题?

num = (int)(num) 将为您提供较低的 32 位,但如果 num 不适合 ,编译器可能会发出溢出异常警告>整数

关于c - 长型 64 位 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10040123/

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