- 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