第一节 进制的基本概念
位进制是人们为了计数和运算方便而约定的计数系统,我们的计算机中一般采用的就是二进制。那什么是二进制呢?十进制是指10个数字,0-9,逢10进1;二进制则是指2个数,0和1,逢2进1,一个数在不同的位置上所代表的值会不同。十进制是我们现实生活中经常使用的,我们也比较熟悉,那二进制是如何用来表示一个数呢?用十进制的数举例来说8=1000;3=0011;2=0010;9=1001;6=0110。整数8的二进制=1000,从右往左数,前三位是0,第四位是1,也就是2的3次方,2^3 * 1+2^2 * 0+2^1 * 0+2^0 * 0=8。
十进制转换成二进制的方法,我们一般把需要转换的数作为一个除数,除以2,得到的余数不是1就是0,把取到的余数取出倒着读就是该数的二进制。计算机中广泛使用二进制,可以使其运算简单,简化了计算机的结构。当然计算机中还有其它的进制,如八进制(0-7,逢八进一,标志的开头用0表示),十六进制(0-9,A,B,C,D,E,F,标志的开头用0x表示 ),在这里可以看到8和16分别是2^3和2^4,因为都是2的整数次方,所以会常用一些。
十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
二进制 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
八进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
十进制转换二进制,使用需要转换的数除以2取余,倒着输出余数就是该数的二进制,八进制同理,也是用数除以8,然后得到余数从下往上数即可,十进制转换八进制,十六进制都是一样的。二进制,八进制,16进制转换10进制,也是按权展开,相加即得十进制数。
第二节 二进制的位运算
运算符 | & | | | ^ | ~ | << | >> |
>>> |
---|---|---|---|---|---|---|---|
运算 | 与 | 或 | 异或 | 取反 | 左移 | 右移 | 无符号右移 |
示例 | 6&3=2 | 6|3=7 | 6^3=5 | ~6=-7 | 3<<2=12 3*2*2=12 | 3>>1=1 3/2=1 | 3>>>1=1 3/2=1 |
程序中所有的数都是以二进制存储的,位运算就是直接对二进制进行的位操作。
1.按位与&运算,两位全为1,结果才为1。0&0=0;0&1=0;1&0=0;1&1=1。与位算的特殊用法:
- 清零,如果想将一个单元清零,即使其全部二进制为1,只需要与一个各位都是0的数值相与,结果为零;
- 取一个数中的指定位。举例说取某数的低四位,只需要将这后四位与1111相与,是1则还是1,是0则还是0。10101110&00001111=00001110
2.按位或|运算,两位只要有一数为1,结果就为1。0|0=0;0|1=1;1|0=1;1|1=1 或运算的特殊用法:
常常用来对数的某些位,置1,设置为1。取一个X=10100000 x|00001111=10101111。
3.异或^运算,两个相应位为异,值不同,则该结果为1,否则为0,0^0=0; 0^1=1; 1^0=1; 1^1=0;异或运算的特殊用法:
- 使特定位反转,对应某数要反转的位置,使其与1进行异或运算,如原数为0,则0^1=1;原数为1,1^1=0;
- 与0相异或,保留原值。
- 与本身异或值为0。
4.取反运算~,对一个二进制数按位取反,即0变成1,1变成0。
5.左移运算<<,将一个运算对象的各二进制位全部向左移若干位(左边的二进制位丢弃,右边补0)。若左移时舍弃的最高位不包含1,则每左移一位相当于该数*2。举例来说:2的二进制码为10,这里10的前面实际是有若干个0,32位:00000000 00000000 00000000 00000010 左移1位变为100。2<<1=4。
6.右移运算