位运算

按位与 & 

两个都不为0即为1

如果参加&运算的是负数(-3&-5),则要以补码形式表示为二进制数,然后再进行按位与运算。

 

用途:

清零 : 将二进制数11100101的第二位清零   11100101 & 11100011

取一个数中某些指定位:对一个字型数据取出其低5位的值

            11010101  01011011

  &       00000000  11111111

            00000000   01011011

 

按位或   |

有一个为1结果就为1

A   65            100 0001         第五位不一样 

a    97            110 0001

 

异或  XOR ^

相同为0    不同为1

使特定位翻转    : 使0111 1010 低四位翻转

              0111 1010

  ^          0000 1111

               0111 0101

 

与0异或,保留原值

              0000 1010

   ^         0000 0000

               0000 1010

 

交换两个值,不用临时变量

a=a^b;

b=b^a;        //b=a;

a=a^b;

 

取反 ~

按位取反

 

左移运算符 <<

左移一位则该数扩大为原来的2倍 右边补0           a<<1 

 

右移运算符  >>

右移一位 缩小一倍  左边补0

在右移时,需要注意符号位问题

如果符号位原来为1(即负数),则左边移入0还是1要取决于操作系统

 

位运算赋值运算符

位运算符与赋值运算符可以组成符合赋值运算符。

例如:   &=        |=       >>=     <<=     ^=

a&=b    即 a=a&b

 

题目:取一个char a从右端开始的2~5位。

①先使a右移2位:a>>2(目的是使要取出的那几位移到最右端)

②设置一个低4位全为1,其余全为0的数     ~(~0<<4)

③进行&运算   (a>>2)& ~(~0<<4)  

 

题目:要求将a进行右循环移位

 1011 0100        2              a

 0010 1101    结果             d

 0000 0000                    b=a<<(sizeof(char)*8-n);

 0010 1101                    c=a>>n;

 0010 1101                    d=b|c;

 

 位段

信息的存取一般以字节为单位。实际上优势存储一个信息不必用一个或多个字节.

例如,真假用1或0表示,只需一位即可。

在计算机用于过程控制,参数检测或数据通信领域时,控制信息往往只占一个或几个二进制位,常常在一个字节中放几个信息。

 

c语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域bit field”。利用位段能够用较少的位数存储数据。

struct packed-data

{  unsigned a:2;   

   unsigned b:6;

   unsigned c:4;

   unsigned d:4;

   int i;

}data;

①位段成员的类型必须指定为unsigned或int类型

②可以定义无名位段

③..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3749576/blog/1622197

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值