添加有符号和无符号整数
Adding signed and unsigned integers
我想将有符号的 int 添加到无符号的 int:
int num1=20; //Signed
unsigned num2=-10; //Unsigned
printf("%u",num1+num2);
我的理解:
当我们添加有符号(int,long,long long(到相同等级的无符号时,unsign总是获得最高的优先级。因此,num2 将更改为 4294967286,num1在无符号转换后将保持 20。并且添加应该是4294967306的。但答案是10。
我认为这是一种糟糕的编码方式,因为它会造成混乱。但是,我仍然想了解我哪里错了。
事实上,num2
将表示数字4294967286 = 2^32 - 10
。 当您将20
添加到该数字时,您将获得
num2 + 20 = 2^32 - 10 + 20 = 2^32 + 10 = 10
最后一步是由于溢出,因为您的变量存储在 32 位数据类型中。进一步阅读
https://en.wikipedia.org/wiki/Integer_overflow
相关文章:
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 计算机使用什么方法添加无符号整数
- boost::任何带有结构体和无符号整数
- 添加有符号和无符号整数
- 如何安全地比较两个无符号整数计数器?
- 计算 (64 位无符号整数) * (64 位无符号整数) 的商除以 2^64
- 如何将 32 位无符号整数分配给包含 32 位的位字段
- 如何将以"\0"开头的字符 * 转换为无符号整数?
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 为大无符号整数分配内存的有效方法