将unsigned int添加到int
adding unsigned int to int
#include <iostream>
int main ()
{
using namespace std;
unsigned int i = 4;
int a = -40;
cout<<a+i<<endl;
return 0;
}
执行这个命令得到4294967260
我知道这里发生了转换,从有符号整型到无符号整型,但是这个特殊的值是如何产生的,为什么产生的呢?我注意到它接近于| 2147483647 | + 2147483647
当一个unsigned int
和一个int
相加时,int
在相加之前先转化为unsigned int
(结果也是unsigned int
)。
-1虽然是第一个负数,但实际上相当于最大的无符号数——即(unsigned int) -1 === UINT_MAX
。
-2的无符号形式是UINT_MAX - 1
,以此类推,所以-40 === UINT_MAX - 39 === 4294967256
(当使用32位int型时)。
当然,加4就是你的答案:4294967256 + 4 = 4294967260
.
这是一个很棒的测试,您可以在其中学习C(以及类似的c++)中的一些整数规则:http://blog.regehr.org/archives/721
用十六进制表示i和a:
i = 4: 0x 0000 0004
a = -40: 0x FFFF FFD8
根据c++的隐式转换规则,a + i中的a将被强制转换为unsigned int,即4294967256。所以a + i = 4294967260
相关文章:
- 将布尔变量添加到 int
- 如果 x < 10,则添加前导 0 并将其存储为 int
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- 赋值和添加运算符重载(2个表和int的串联)
- 向size_t添加 int 的正确方法
- C++在减去 int 时向 int 添加一个额外的数字
- 尝试将 char* 添加到 int 时触发编译器错误
- 当我向 vector<int *> 添加元素时,我遇到了一些问题
- 重载 + 运算符以使用 int 添加对象
- 将 int 添加到长整型
- 如果我将未签名的int添加到负int且算术结果是正面的,会发生什么
- 将字符串和 int 添加到字符串中
- 如何在 C/C++ 中将 int 添加到 char[]
- 在 c# 中将 int 添加到字符以将其 ascii 值向上移动(就像在 c++ 中一样)
- 如何在单击按钮时将字符串和int添加到QTableView
- 在c++中,如何从字符串中删除字母,并从字母中向int添加一个数字
- 将unsigned int添加到int
- 如何将C++ "int"添加到哈希集<Integer>?
- C++ 将字节值作为 int 添加到 CString
- 当我将 int 添加到字符时调用哪个运算符 + 函数('a' + 1)