use*_*939 3 c integer integer-overflow
这个问题可能只是另一种不正确地解释操作员的情况.但不久之前,我看到有人发推文关于一个运营商的信息,据称可以用来检查C中的整数溢出.即&+(&符号加)运算符,它可以像这样使用:
#include <stdio.h>
#include <stdint.h>
int main()
{
uint32_t x, y;
x = 0xFFFFFFFF;
y = 1;
if (x &+ y) {
printf("Integer overflow!\n");
} else {
printf("No overflow\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它看起来确实像人们期望的那样工作,GCC 6在使用这些参数进行编译时不会给我任何警告或错误: gcc -Wall -Wextra -Werror of.c
但奇怪的是,我还没有找到关于这个运算符的任何文档,我从来没有看到它在任何地方使用过.有人可以解释一下这是如何工作的?
表达方式
x &+ y
Run Code Online (Sandbox Code Playgroud)
被解析为
x & (+y)
Run Code Online (Sandbox Code Playgroud)
使用一元加运算符,它没有效果(在这种情况下),只返回y.这意味着表达式相当于
x & y
Run Code Online (Sandbox Code Playgroud)
这不会不测试整数溢出,而是只检查如果X和Y具有任何公共位.尝试将x和y更改为1,看看会发生什么; 它会报告溢出,即使没有发生.
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |