【发布时间】:2018-02-03 13:15:35
【问题描述】:
int main(){
unsigned int num1 = 0x65764321;
unsigned int num2 = 0x23657432;
unsigned int sum = num1 + num2;
cout << hex << sum;
return 0;
}
如果我有两个无符号整数,说 num1 和 num2。然后我告诉计算机未签名
int sum = num1 + num2;
计算机用什么方法来相加,会不会是补码。 sum 变量会以二进制补码形式打印吗?
【问题讨论】:
-
二进制补码在无符号数的上下文中没有意义。
-
@SamVarshavchik
unsigned溢出定义明确。 -
我假设您的讲师正在谈论 x86 的 cpu 标志,并且该标志已设置,因为 x86 只有一个添加项,它同时执行有符号和无符号。使用适当的标志取决于您(或编译器)。 PS:虽然对结果没有影响。
-
@nwp,在一些 cmets 之后问题的文本发生了变化..@SamVarshavchik 当时是对的..
-
@ped7g:实际的 CPU 执行的操作与简单的波纹进位加法器产生相同的结果,但延迟更低。一个常见的事情是carry-lookahead,它以较小的块工作,然后修复进位。说实际的硅只是从最低位开始是不正确的。
标签: c++ assembly cpu-architecture