c++ - c++代码的安全性与有符号和无符号之间的隐式转换
问题描述
根据此处和此处讨论的有符号和无符号整数类型之间隐式转换的规则,当将 anunsigned int
与 a相加时int
,首先将有符号int
转换为 an unsigned int
。
例如,考虑以下最小程序
#include <iostream>
int main()
{
unsigned int n = 2;
int x = -1;
std::cout << n + x << std::endl;
return 0;
}
尽管如此,该程序的输出还是 1 正如预期的那样:x
首先转换为 a unsigned int
,并且与 的和n
导致整数溢出,给出“正确”的答案。
在像前一个代码这样的代码中,如果我确定这n + x
是正数,我可以假设 和 的总和unsigned int n
给出int x
期望值吗?
解决方案
推荐阅读
- javascript - 在 TypeScript 中获取日期的周数
- python - 为什么 pip install colorama~=0.3 安装 colorama-0.4.0
- docker - docker挂载在windows上,目录为空
- node.js - 在 firebase webhook 中调用 get 服务
- java - 如何在 URL 中传递插入符号?
- scala - 从scala中的zipWithIndex获取元组作为参数
- r - 我想在 Windows 上的 R 2.8.1 上安装包 xlsx,但是当我需要 .zip 时我必须使用 .tar.gz 旧包
- ruby-on-rails - 如何断言没有进行方法调用,没有任何实例?
- javascript - 如何设置每 10 秒刷新一次位置的间隔?
- php - WHMCS - Hook ClientEdit 不会触发