位操作

  【一】位运算符

    共有6种位运算符,如下:

【1】&   与运算符     解释: &(与)运算要求有两个运算值,然后返回一个值,当且仅当两个运算值都位1时,返回值为1
【2】 |   或运算符      解释:|(或)运算符要求两个运算值,然后返回一个值,当且仅当两个运算值中有一个为1或都为1时,返回值为1
 【3】  ^   异或运算符     解释:^ (异或)运算符要求有两个运算值,然后返回一个值,当且仅当两个运算值中有一个为1但不同时为1时,返回值为1
【4】 ~   取反运算符      解释:~(取反)运算符只要求一个运算值,然后将所有的1变成0,所有的0变成1。使用取反运算可以将某些字节置0,确保其它字节置1

【5】 <<   左移运算符  解释:“左移”——将变量的各位按要求向左移动若干位。如:0000 1000 <<3 = 0100 0000;

【6】>>   右移运算符   解释:“右移”——将变量的各位按要求向右移动若干位。如:0000 1000>>3=0000 0001;

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

  【二】应用

【1】交换变量

例如,若有变量a = 3,b = 4,想要交换它们的值,可以做如下一组操作:

a ^ = b                                           以后可以用这个方法交换变量  不用引入第三变量

b ^ = a                                  

a ^ = b

 

首先,a ^ = b:

    a    0000 0011

^  b    0000 0100

a =    0000 0111

 

其次,b ^ = a:

    b    0000 0100

^  a    0000 0111

b =    0000 0011

 

最后,a ^ = b:

    a    0000 0111

^  b    0000 0011

a =    0000 0100

 

这样,a、b两个变量中的值就进行了对调。

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

【2】快速乘除运算  在二进制中向左一位相当于乘二        向右一次相当于除2;

特别注意对某变量进行移位操作时,变量本身不会变。byte、short和char类型移位后的结果会变成int类型。表达式int a=(b<<24)+(c<<16)(b,c为char型)是正确的虽然b、c均只有8位。

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

【3】将寄存器指定位置为1或者0

PORTA |= (1<<n)  将porta的第n为置为1,其他为不变。比如说,你如果想将第4位置1,就使用:

PORTA | = (1<< 4)就行了。当然,也可以使用:

PORTA | = (1<< 7) | (1<< 4 ) | (1<< 0)这样的指令一次将设第8、5和1位置1,但又不影响到其它位的状态

0也是一样;

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

目前应用

【1】现在可以处理无法交换两个变量的问题;

【2】当用于乘除时,可以减少程序占用,只有一个字节;

【3】至于换0  1这个操作,目前还没有好的例子来做,暂时没有用;

【4】还有两个数之间的各种位运算,暂时没什么用


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值