10进制转2进制
使用短除法
原码、补码与反码
计算机是用补码来存储数据的,为什么要用引入反码和补码呢?
- 原码:数字在计算机中的表现形式是二进制,叫做机器数,二进制是带有符号位的,比如:数字 3和-3,二进制表示方法分别为 00000011 和10000011 ,最高位,即最左边的位置是符号位,0表示正,1表示负。
- 反码:正数的反码与原码相同,负数的反码是在其原码的基础上,符号位不变,其余位数取反。即1变成0,0变成1.
- 补码:证书的补码与源码相同,负数的补码是在反码的基础上加1.
十进制数 | 原码 | 反码 | 补码 |
---|---|---|---|
3 | 00000011 | 00000011 | 00000011 |
-3 | 10000011 | 11111100 | 11111101 |
9 | 00001001 | 00001001 | 00001001 |
-9 | 10001001 | 11110110 | 11110111 |
简单来说引入反码是为了让计算机的基础电路设计变得简单,因为加上一个负数相当于减去一个正数,这样可以让计算机只需要做加法即可。但是这样明显有个弊端,对于数字0来说,会有2个编码表示0:00000000和10000000 ,而0带符号是没有意义的。因此引入了补码,正数的补码是原码本身, 负数的补码是反码+1。 相当于 十进制数 -0,原码:10000000,反码:11111111,补码:溢出,相当于-128 。因此,-128实际上是通过-0的补码来表示的,因此-128没有原码和反码。这样就解决了0的多重表示问题。而且也能多表示一个数字 -128,也就是为什么8位二进制数的表示范围是[-128]到[127]
按位运算符
- & 按位与:参与运算的两数,各对应的二进位相与,即都为1则为1,否则为0。
如9&5:
00001001
00000101
00000001 计算结果,最终为1
- | 按位或:参与运算的两数,各对应的二进位相或,只要有一个为1,则为1.
如4|2
00000100
00000010
00000110 计算结果,最终为6
- ^ 按位异或:参与运算的两数,各对应的二进位相或,即每个相对应的数字不同则为1.
如4^2
00000100
00000010
00000110 计算结果,最终也为6
移位运算
二进制数整体向左或者右移动,缺的部分补0.向左移动相当于乘法,向右移相当于除法。如十进制数字5<<2。二进制表示法为00000101 向左移动2位是 00010100,相当于5乘以2*2.