人有十个手指头,习惯了逢十进一,于是十进制成了生活中的标准。程序的世界只有高低电平两种状态,更适合用二进制来表示,于是二进制成了程序世界的标准。
对与无符号数来说,我们更喜欢谈他们之间的转化,十进制是我们最习惯的进制,于是十进制转为R进制,R进制转为十进制变尤为重要。

无符号数

十进制——>R进制(整数部分小数部分分开转化,取到的第一个余或第一个整最接近小数点)
将十进制的217转化为二进制数(除基取余法)

所以转换结果为11011001

将十进制的0.6875转化为二进制数(乘基取整法)

转化结果为0.1011

所以217.6875转成二进制是多少你知道了吗?

R进制——>十进制(多项式代替法)
将二进制的10111.1101101转换为十进制

有符号数

对与有符号数来说,我们更喜欢谈并且才能谈这三个:原码、反码和补码。
原码:符号位用0表示正1表示负,数值位与真值一样
反码:符号位用0表示正1表示负,正数时数值位还是真值,负数时数值位是真值的按位取反
补码:符号位用0表示正1表示负,整数补码的数值位和真值相同,负数补码的数值位是真值的按位取反,在最低位加一

运算:原码运算复杂,首先需要判断是否同号,并且零的表示有两种。反码零的表示也有两种,运算时符号位与数值位一同进行运算。当符号位出现进位时,需要将进位加到运算结果的最低位,才能得到最后结果。而补码中0的表示只有一种,加法计算的规律也和无符号数一样。

小技巧:
X的补码符号位连同数值位变反加一就可以得到-X的补码
对与反码、补码来说,扩展的数据位的值和原来的符号位的值是一样的