负数二进制表示
负数在计算机中用补码表示。这是教科书上到表示,由于时间久远,又由于上课没好好学,以至于补码是啥,在心中没留下任何到痕迹,补习一下。
原码:
整数在内存中用原码表示,即按绝对值大小转换成二进制
如: 00000101是5到二进制表示
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码
如:00000101按位取反,得11111010
补码:反码+1
如:11111010+1得11111011,16进制表示位0xFB
二进制转换为10进制
int converse(string str) { int result = 0; int i, j; const char *str_cstring = str.c_str(); for(i = 0; i < str.length(); i++) { char ch = str_cstring[str.length() - i - 1]; int digital = ch - 48; if (digital) { result += 1 << i; } } return result;} cout << converse("0101") << endl; cout << converse("1101") << endl;int converse2(string str) { int result = 0; int i, j; const char *str_cstring = str.c_str(); int flag = str_cstring[0] - 48; if (!flag) { for(i = 0; i < str.length(); i++) { char ch = str_cstring[str.length() - i - 1]; int digital = ch - 48; if (digital) { result += 1 << i; } } } else { int mask = 1; for (i = 1; i < str.length() - 1; i++) { mask += 1 << i; } for(i = 0; i < str.length() - 1; i++) { char ch = str_cstring[str.length() - i - 1]; int digital = ch - 48; if (digital) { result += 1 << i; } } result--; result = ~result; result &= mask; result *= -1; } return result;}cout << converse2("0101") << endl; cout << converse2("1101") << endl; cout << converse2("1111") << endl; cout << converse2("1111111111111011"); cout << converse2("1111111111111111");