为什么整数类型int64_t不保留此合法值?

泛光灯

我正在尝试为一些极端情况编写测试用例。对于type的输入,int64_t将不会编译以下行:

int64_t a = -9223372036854775808LL;

错误/警告是:

error: integer constant is so large that it is unsigned [-Werror]

我以为这个数字超出范围,所以我尝试了:

std::cout << std::numeric_limits<int64_t>::min() << std::endl;

它输出完全相同的数字!!!因此常数在范围内。

如何解决此错误?

本·沃格特

你可以写

int64_t a = -1 - 9223372036854775807LL;

问题是,-它不是文字的一部分,而是一元减。因此,编译器首先查看9223372036854775808LL(超出signed的范围int64_t),然后找到此值的负数。

通过应用二进制减号,我们可以使用两个范围内的文字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么类型 unsigned 使 std::variant<int64_t,uint64_t> 构造不明确?

为什么将mod与int64_t操作数一起使用会使此功能慢150%?

为什么当int64_t更改为int32_t时类的大小增加

为什么在运行时重新定义的此方法不保留其值?

为什么右值引用整数合法

为什么在这里使用int64_t错误并进行int编译?

为什么使用 int64_t 会给出错误的结果,而对于简单的整数乘法,double 却按预期工作

从int64_t转换为double到int64_t再次更改其值

为什么long long不是int64_t但它们具有相同的大小?

如何在C中打印int64_t类型

为什么结构中的变量不保留其值?

为什么我的@State对象不保留其值?

为什么“ var = value somecommand”不保留var的新值?

动态整数大小:int64_t,int32_t,uint32_t等

在保留顺序的同时将float转换为int64_t

C ++中int64和int64_t有什么区别?

尝试构建torchscript扩展会导致INVALID TYPE:仅支持int64_t和bool作为整数参数类型错误

为什么在屏幕旋转时不保留此共享首选项?

为什么在屏幕旋转时不保留此共享首选项?

tar为什么不保留文件权限?

为什么Firefox不保留日期?

为什么列表不保留其价值?

链接器为什么不保留封装?

C99 是否要求始终使用 `int64_t` 类型?

int64_t和类似类型是否有可移植的文字后缀?

为什么不保存此MySQL查询

为什么 SQL Server 不保留表达式中的数据类型?

为什么此POW循环保留初始值?

为什么这个 list<int[]> 不保留第一个元素?