位编号和位值

有符号整数
如何表示有符号整数取决于硬件,而不是C语言。也许表示有符号最简单的方式是用1位储存符号。只剩7位表示数字本身(假设用1字节存储数据)。这种符号量(sign-magnitude)表示法,10000001表示 -1,00000001表示 1 。表示范围为 -127 ~ 127 (1+2+4+8+16+32+64=127)
二进制补码(two's-complement)
还是以1个字节为例子。
二进制补码用 1 字节的后 7 位表示 0~127 ,高阶位设置为 0 。
如何确定负值?
从一个 9 位组合 1 0000 0000 (256的二进制形式)减去一个负数的位组合,结果是该负值的量。
假设一个负值的位组合是 1000 0000 ,作为一个无符号字节,该组合表示 128 ;作为一个有符号值,该组合表示负值(编码7的位为1),而值为 1 0000 0000 - 1000 0000 = 1000 0000,即128。因此,该数是 -128(在符号量表示法中,该位组合表示 -0)。类似:1000 0001 表示 -127, 1111 1111 是 -1 。该方法表示范围 -128 ~ 127 。
二进制补码的相反数:最简单的方法是反转每一位,然后加 1 。因为 1 是 0000 0001 ,那么 -1 则是 1111 1110 + 1 (1111 1111) 。
二进制反码(one's-complement)
通过反转位组合中的每一位形成一个负数。例如: 0000 0001 是 1,那么 1111 1110 是 -1 。这种方法也有一个 -0:1111 1111 。该方法能表示 -127 ~ +127 之间的数。
二进制浮点数
二进制表示法只能精确的表示多个 1/2 的幂的和。
.101 表示为 1/2 + 0/4 +1/8 = 0.625
按位逻辑运算符
| 符号 | 功能 |
|---|---|
| ~ | 按位取反或二进制反码 |
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或(相同为0,相异为1) |
掩码(mask)
所谓掩码是指的一些设置为开(1)或关(0)的位组合。
- 打开位
- 关闭位
- 切换位
- 检查位的值
单片机编程用烂了,不解释。
移位运算符
| 符号 | 功能 |
|---|---|
| << | 左移,末端补0 |
| >> | 右移,无符号类型末端补0。 有符号类型,可用0补充,可用符号位副本补充。(具体系统分析) |