olenji

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二进制码由来:

一个字节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  olenji  阅读(183)  评论(0编辑  收藏  举报