博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《第五章 操作符和表达式》
阅读量:7146 次
发布时间:2019-06-29

本文共 1204 字,大约阅读时间需要 4 分钟。

 

一、计数一个值中值为1的位的个数

//这个函数返回参数值中值为1的位的个数int count_one_bits(unsigned value){     int ones=0;     //当这个值中还存在一些值为1的位时    for(ones =0;value!=0;value>>=1)    {         if((value&1)!=0)         {             ones++;         }    }}

  (1)这里我们先假设value的值为 0001 0000;

  (2)那么value&1不为0,则ones加1;

   (3)  然后value右移1位;即0000 1000;此时value&1;任然不为0,ones加1;

       如此循环下去;最终获取value中bit为1的个数。

 

二、关于左移和右移

  <<左移                  >>右移

   可以这么记。比如书名号是《》这样的,书名号的左边《就是左移,书名号的右边》就是右移。

   左移就是值得最后bit位依次补0,而右移就是值得最前bit位依次补0.

 

三、位操作符

 &   |   ^ 

  a = 0010 1110,

  b = 0101 1011,

  (1)    a&b  = 0000 1010; 如果两位都为1,则为1;否则为0

     0010 1110

     0101 1011

    ------------------

     0000 1010

      (2) a|b = 0111 1111;如果两位都为0,则为0;否则为1

     0010 1110

      0101 1011

    ------------------

      0111 1111

   (3) a^b = 0111 0101;如果两位不同,结果为1,否则为0

       0010 1110

     0101 1011

    ------------------

     0111 0101     

     0000 1010

  

        (4)把指定位的bit设置为1

      value|=1<<bit_number;//从右向左,第bit_number位,置为1;

         (5)把指定位的bit设置为0

      value&=~(1<<bit_number);

    (6)判断指定bit位是否为1

      value&1<<bit_number;

 

 

四、前缀++和后缀++

  在操作数之前的操作符在变量值使用之前增加它的值;

  在操作数之后的操作符在变量使用之后增加它的值。

 

五、关于强制转换

  只能低位向高位转,

  不能高位向低位转

  比如 int转char;由于char只占1byte;而int占4个byte,那么强转后,int值必须丢弃3byte的值,转成char型时,结构已经不对,裁剪了。

转载地址:http://qjgrl.baihongyu.com/

你可能感兴趣的文章