gpt4 book ai didi

c++ - 符号转换发生在哪里?

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:42 26 4
gpt4 key购买 nike

我有以下代码:

unsigned int x, last_x;
int dx;
[...]
dx = x - last_x;

使用 g++ (4.7.2) 和 -Wsign-conversion 编译它会产生以下结果:警告:从“unsigned int”转换为“int”可能会改变结果的符号 [-Wsign-conversion]

使警告消失的唯一方法是更改​​为:

dx = static_cast<int>(x) - static_cast<int>(last_x);

dx = static_cast<int>(x - last_x);

这种行为的解释是什么? - 运算符是否仅为有符号整数定义?我希望有一个 - 运算符,它接受无符号值并返回有符号值。

最佳答案

unsigned int 的操作将产生 unsigned int。即使减法也会产生一个 unsigned int。该值只是环绕:与有符号整数算术不同,无符号值的上溢和下溢会导致定义良好的行为:该算术只是模数 N 其中 N 是最大值的一加可以用无符号整数表示的值。

关于c++ - 符号转换发生在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316235/

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