gpt4 book ai didi

c++ - 左移计数 >= 类型宽度 - 单独添加 UL 或强制转换不能解决问题

转载 作者:行者123 更新时间:2023-11-28 05:22:44 28 4
gpt4 key购买 nike

我正在尝试做一些非常简单的事情,但我收到了这个警告。这是我所拥有的:

#define VERSION ( (unsigned long)( (CORE_ID << 32) + (PROTO_ID << 24) + (VERSION_ID << 16) + (RELEASE_ID << 8) + (HOTFIX_ID) ) )

unsigned long vern = VERSION;

我不断收到警告 left shift count >= width of type 而我所做的一切都没有帮助摆脱这条消息。我尝试单独转换到 unsigned int 但这也没有帮助。所有 ID 都是普通的#define 数字。

我尝试将 UL 添加到每个数字的末尾,但这也无济于事。我知道这意味着我的移动导致溢出,但我不确定如何补救它,考虑到所有内容都定义为 UL。我不确定我做错了什么,感谢任何帮助。

非常感谢

最佳答案

在所有计算之后进行转换将无济于事;问题是被转移的类型太小,答案是增加它们的大小。我不想全部输入,但模式如下:

#define VERSION ((unsigned long)CORE_ID << 32)

CORE_ID 转换为类型 unsigned long 可能会解决问题。如果 unsigned long 太小(即 32 位宽,这是允许的最小大小),则将其更改为 unsigned long long。在原始代码中,将这些内容中的每一个都转换为 unsigned long;一旦它们都具有 unsigned long 类型,组合它们的结果也将是 unsigned long,您将不需要初始转换。

关于c++ - 左移计数 >= 类型宽度 - 单独添加 UL 或强制转换不能解决问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129386/

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