加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – uintmax_t不处理128位

发布时间:2020-12-16 09:56:07 所属栏目:百科 来源:网络整理
导读:我想在我的代码中定义千兆字节,所以我首先使用unsigned long.但是,unsigned long无法处理2 * GB. 所以,我用很长的时间替换它,但我得到了相同的编译错误/警告: ????错误:表达式中的整数溢出[-Werror = overflow] 最后,我查找了大整数,发现uintmax_t是我需要
我想在我的代码中定义千兆字节,所以我首先使用unsigned long.但是,unsigned long无法处理2 * GB.

所以,我用很长的时间替换它,但我得到了相同的编译错误/警告:
????错误:表达式中的整数溢出[-Werror = overflow]

最后,我查找了大整数,发现uintmax_t是我需要的,因为它是128位.

不幸的是,我仍然得到同样的错误.我想有一个小故障但我能找到它.

请在下面找到相关代码:

#define kilobyte 1024
#define megabyte 1024 * kilobyte
#define gigabyte 1024 * megabyte
uintmax_t threshold = 2 * gigabyte;

最后,在运行’make’之后

g++ -Wall -Wextra -Werror -pedantic -pthread -std=c++0x -g  -o lcr main.cpp

我有:

main.cpp: In function ‘int main(int,char**)’:
main.cpp:104:17: error: integer overflow in expression [-Werror=overflow]
cc1plus: all warnings being treated as errors

解决方法

我们来看一段代码:

uintmax_t x = 2 * 1024;

这里发生的是,我们有(int)2 *(int)1024,然后我们将结果提升为uintmax_t.

相反,我们想要:(uintmax_t)2 *(uintmax_t)1024.我们可以通过这种方法轻松地将整数提升为long long:

#define kilobyte 1024ULL
#define megabyte 1024ULL * kilobyte
#define gigabyte 1024ULL * megabyte
uintmax_t threshold = 2ULL * gigabyte;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读