二进制码由来:
一个字节byte有8位bit,位7为高位,位0为低位。
该字节可以保存的最大数为:
128+64+32+16+8+4+2+1 = 255
所以总共可以存储256个数,如果带符号,可以存-128到+127.
通常我门用位7为符号位,0表示正,1表示负(10000001为-1,00000001为1)。
此时我门发现,100000000表示-0,00000000表示+0,对现实先来说他们没有差别,进而造成了浪费。所以用到二进制补码。
二进制补码换算方法:
1.正数无差别
2.求负数,将正数取反加一。
011111111表示127
取反为 10000000
加一 10000001 《=此为-127的二进制码
位运算符
~ 位取反
& 位与
| 位或
^ 位异或
用发:
掩码 flags &= MASK
打开位 flags |= MASK
关闭位 flags &= ~MASK
转置位 flags ^= MASK //打开变关闭或者关闭变打开
查看某一位 (flags & MASK) == MASK
移位运算符
<< 左移 空位补0
>> 右移 signed可能补0,或者符号位副本填充;unsigned补0.
位字段
位字段通过结构声明体现:
struct box_props { unsigned int opaque :1; unsigned int fill_color :3; unsigned int :4; unsigned int show_border :1; unsigned int border_color :3; unsigned int border_style :2; unsigned int :2; }
posted on 2016-01-21 10:15 阅读( ...) 评论( ...)