gpt4 book ai didi

c - 如何左移大于 64 位的值?警告 : shift count >= width of type [-Wshift-count-overflow]

转载 作者:行者123 更新时间:2023-11-30 20:52:46 26 4
gpt4 key购买 nike

我正在尝试左移大于或等于 64,但我不确定存在哪种数据类型可以帮助我。

我正在处理现有项目,其中已经采用了 63 个宏,接下来是 64 个宏(这是我的更改),我必须对其进行左移操作。

注意:我只是想了解如何设置大于 64 位的特定位。 “我不确定哪种数据类型可以帮助我”。下面的代码只是示例代码。我们知道不存在大于 64 位的数据类型,但是有什么解决方案吗?

#include <stdio.h>
#define PEAK 64

int main()
{
unsigned long int a;
a= (1ULL << PEAK);
printf("%lu",a);
return 0;
}

main.c:8:10: warning: left shift count >= width of type [-Wshift-count-overflow]
a= (1ULL << PEAK);
^~

最佳答案

I just want to understand how do i set a particular bit greater then 64bits.

你不能。

旧答案:

您可以按照您正在做的事情进行左移大于或等于 64 位。

当然,这不会产生任何可用的结果(原始值、零或其他值),并且是未定义的行为,因此不要这样做

如果您想要一种可以做到这一点的数据类型,那您就不太走运了。无法保证 C 中存在 128 位数据类型,并且您可能看到的任何编译器扩展都是不可移植的。这对于 SIMD 指令来说是可能的,但它们不能跨处理器移植。

也就是说,GCC 和 Clang 中有 unsigned __int128 允许移位(通过模拟更宽的整数)。然而,这个isn't available in MSVC 。另请注意,您将无法打印此数字,因此无论如何它都是毫无意义的。

关于c - 如何左移大于 64 位的值?警告 : shift count >= width of type [-Wshift-count-overflow],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57571123/

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