- int reverse(int x,bool &flag) {//flag means if the result is overflow
- int signal=1;
- if (x<0)
- {
- signal=-1;
- }
- int temp,ret=0,newv=0;
- while(x!=0)
- {
- temp = x%10;
- x = x/10;
- if (x!=0)
- {
- newv = newv*10 + temp;
- }
- else//last bit may overflow
- {
- if (signal<0)
- {
- if ( 10*newv + temp >= 0)
- {
- flag = false;
- ret = -1;
- return ret;
- }
- ret = 10 * newv + temp;
- }
- else
- {
- if ( 10*newv + temp <= 0)
- {
- flag = false;
- ret = -1;
- return ret;
- }
- ret = 10 * newv + temp;
- }
- }
- }
- return ret;
- }
说明加法器工作的原理。比如
-20的二进制补码 = 11101100 -25的二进制补码 = 11100111
-20 11101100
+(-25) = + 11100111
-45 111010011
超出的最高位去掉后 = 11010011
-45 的补码刚好是 11010011,所以以上式子正确。
这个是说用两个符号位表示时,溢出可以有机器判断了http://www.softwarehistory.net/h/E_Comp_ZuchengYuanli/28.php
本文详细解释了计算机中负数相加时如何判断溢出,利用补码表示法理解正正相加变为负数及负负相加为何可能为正数,同时通过具体例子展示加法器工作原理。
1166

被折叠的 条评论
为什么被折叠?



