gpt4 book ai didi

c++代码的安全性与有符号和无符号之间的隐式转换

转载 作者:IT老高 更新时间:2023-10-28 23:01:49 26 4
gpt4 key购买 nike

根据有符号和无符号整数类型之间隐式转换的规则,讨论herehere ,当将 unsigned intint 相加时,已签名的 int 首先被转换为 unsigned int

考虑,例如,以下最小程序

#include <iostream>

int main()
{
unsigned int n = 2;
int x = -1;

std::cout << n + x << std::endl;

return 0;
}

尽管如此,程序的输出还是 1,正如预期的那样:x 首先转换为 unsigned int,然后与 n 相加> 导致整数溢出,给出“正确”答案。

在类似上一个的代码中,如果我确定 n + x 是正数,我可以假设 unsigned int n 的和>int x 给出期望值?

最佳答案

In a code like the previous one, if I know for sure that n + x is positive, can I assume that the sum of unsigned int n and int x gives the expected value?

是的。

首先,有符号值converted无符号,使用模算术:

If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2n where n is the number of bits used to represent the unsigned type).

那么两个无符号值将是added使用模算术:

Unsigned integers shall obey the laws of arithmetic modulo 2n where n is the number of bits in the value representation of that particular size of integer.

这意味着你会得到预期的答案。

即使结果在数学意义上是负数,C++ 中的结果也会是一个模等于负数的数。

请注意,我在这里假设您添加了两个相同大小的整数。

关于c++代码的安全性与有符号和无符号之间的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53181174/

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