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.
所以,我用很长的时间替换它,但我得到了相同的编译错误/警告: 最后,我查找了大整数,发现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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |