zoukankan      html  css  js  c++  java
  • arm学习——有关位操作的总结

    在学习arm的过程中,感觉寄存器,基本不会提供位操作,而是整体的操作,
    整体操作的就是要注意在对某位赋值的时候不要影响到其他位,看上去不简单,
    其实,整体操作有技巧,
    那么就来总结一下:

    image
    1、首先要理解,“|”符号就是用来置1的,“&”就是用来置0的。
    2、不管置1还是置0,”<<”左边总是以1的形式出现。要置0,加上取反符号。

    结合上面两条规则,事情就很简单了:
    比如先把某个寄存器的第6位置1,那么首先写出(1<<6)待用。
    然后置1就用“|”的规则,所以就是:reg |= (1<<6);
    要是第6位置0呢:
    一样的,首先写出(1<<6)待用。
    置0就用“&”,加上取反符号的规则。所以就是:reg &= ~(1<<6);

    好了,现在理解一个难一点的:
    reg &= ~( (1<<6) | (1<<7) | (1<<2) );
    这个表示什么意思?看到“&=”就知道要将某位置0.
    (1<<6) | (1<<7) | (1<<2)就表示,2,6,7都置1,在看到取反。
    那么这句话的意思就是将2,6,7都置0.

    我们再返回到程序 :

    if(dwDat & (1<<2) )
    这句有是什么意思呢?
    就是判断swDat的第二位是否为1,第二位如果为1,则结果为1,if判断为真。
    这个可以理解为一个读操作~

  • 相关阅读:
    四叉树编码存储的实现
    窗体之间传递值的几种方法
    常见的六种排序算法实现
    OracleHelper类
    c#动态加载dll文件
    STL学习系列九:Map和multimap容器
    STL学习系列八:Set和multiset容器
    STL学习系列七:优先级队列priority_queue容器
    STL学习系列六:List容器
    STL学习系列五:Queue容器
  • 原文地址:https://www.cnblogs.com/douzi2/p/4816704.html
Copyright © 2011-2022 走看看