千家信息网

C++怎么使用有符号数进行数学运算

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"C++怎么使用有符号数进行数学运算"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ES
千家信息网最后更新 2026年11月03日C++怎么使用有符号数进行数学运算

本篇内容介绍了"C++怎么使用有符号数进行数学运算"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

ES.102:使用有符号数进行数学运算

Reason(原因)

因为大部分数学运算都是有符号的。当x>y时,x-y会返回一个负数,极少情况实际需要的是按模运算。

Example(示例)

如果不是你有意为之,无符号运算可能产生意外的结果。如果混用有符号数和无符号数,问题会更明显。

template
T subtract(T x, T2 y)
{
return x - y;
}

void test()
{
int s = 5;
unsigned int us = 5;
cout << subtract(s, 7) << '\n'; // -2
cout << subtract(us, 7u) << '\n'; // 4294967294
cout << subtract(s, 7u) << '\n'; // -2
cout << subtract(us, 7) << '\n'; // 4294967294
cout << subtract(s, us + 2) << '\n'; // -2
cout << subtract(us, s + 2) << '\n'; // 4294967294
}

代码中我们已经很明确地知道发生了什么。但是如果你看到us - (s + 2) or s += 2; ...; us - s,你真的可以想象结果是4294967294么?

Exception(例外)

如果你真的需要按模运算-增加必要的注释提示对溢出行为的依赖,这样的代码会令很多程序员疑惑。

Example(示例)

标准库使用无符号类型作为下标。内置数组使用有符号数作为下标。这会导致代码难于理解并不可避免地带来错误。

int a[10];
for (int i = 0; i < 10; ++i) a[i] = i;
vector v(10);
// compares signed to unsigned; some compilers warn, but we should not
for (gsl::index i = 0; i < v.size(); ++i) v[i] = i;

int a2[-2]; // error: negative size

// OK, but the number of ints (4294967294) is so large that we should get an exception
vector v2(-2);

Use gsl::index for subscripts; see ES.107.

使用ES.107中介绍的gsl::index作为下标。

Enforcement(实施建议)

  • Flag mixed signed and unsigned arithmetic

  • 标记有符号数和无符号数混用的数学运算。

  • Flag results of unsigned arithmetic assigned to or printed as signed.

  • 标记将无符号数学运算的结果赋值给有符号数或者作为有符号数print输出的情况。

  • Flag negative literals (e.g. -2) used as container subscripts.

  • 标记使用负值作为容器下标的情况。

  • (To avoid noise) Do not flag on a mixed signed/unsigned comparison where one of the arguments is sizeof or a call to container .size() and the other is ptrdiff_t.

  • (为了避免误判)当一个参数是sizeof或者container.size()的返回值,而另一个参数是ptrdiff_t的时候,不要标记有符号数/无符号数混合的比较操作。

"C++怎么使用有符号数进行数学运算"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

号数 运算 数学 下标 情况 标记 符号 代码 结果 C++ 内容 参数 实际 更多 知识 示例 输出 实用 明显 必要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 疫情对互联网科技公司影响 重庆互联网络科技 互联网科技有限公司 翻译 互联网科技公司的市场部门 北京大学互联网科技怎么样 汽车互联网创新科技园 宁夏众和广鑫互联网科技有限公司 世界互联网科技公司市值排名 智腾互联网科技有限公司 互联网科技商业 互联网新科技动漫ppt素材 特约风豹互联网科技为什么扣费 世界互联网领先科技成果获奖 电子商务与互联网科技的关系 深圳无忧互联网科技 广州百诚互联网科技有限公司官网 领航科技大厦互联网公司 东营紫格互联网科技 互联网科技的前景 绵阳真晨互联网科技有限公司 互联网是不是新科技 华宇互联网科技 西安互联网科技公司 重庆科技学院互联网 互联网大会黑科技排名 链环科技传统企业怎么转型互联网 广州新华互联网科技学校电竞方面 互联网科技和医药行业 数字科技和互联网金融哪个好 互联网科技快速发展优美句子
0