如果读者还对bit数组还不太了解,可以去看一下我的另一篇文章,那里对bit数组和位运算都做了解释:
http://blog.csdn.net/zimu666/article/details/8284906
二进制
二进制的表达非常简单,只有0和1两个值,又因为他在数字电路中非常容易实现和处理,所以现代计算机几乎全部使用二进制来做为基础运算方式.
二进制运算方式是逢2进1.一组二进制数的值是通过这一个bit位的值,与相应的位指数想乘的结果.
在十进制中表达一个5位数,他们的指数排列是这样的:
指数 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|
值 | 2 | 1 | 1 | 6 | 0 |
这个十进制值的结果就是2 * 10^4 + 1 * 10^3 + 1 * 10^2 + 6 * 10^1 + 0 * 10^0 = 21160
如果在数的后面添加一个0,这个数就在十进制中进了一位,也就是以前数的十倍
二进制的表现方式相同,在讨论二进制的时候,通常需要说明一下哪一位是最高位(most significant bit),哪一位是最低位(least significant bit).
大部分使用的都是最低位在二进制数的最右边.
指数 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
值 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 |
与十进制的运算原理一样: 1 * 2^6 + 1 * 2^5 +1 * 2^3 +1 * 2^1 = 64 + 8 + 2 = 74
同理,如果向这个数(指的是二进制数0110 1010)后面添加一个0,这个数也想当于进了一位,只不过进位后的数是以前数的两倍.
signed/unsigned
这里需要讨论一下signed(有符号)和unsgined(无符号)
什么是符号呢?
一个二进制数的最高位(一般情况下是最左边的一位)被称为符号位,这个位置上面的值(0或1)表示了这个二进制数是不是一个负数,例如
一个8-bit的二进制数,例子中会尽量使用byte格式的数,因为整数类型的太长了,不便于操作
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
通过这