• 与或左移右移操作在ARM寄存器配置中的作用


    逻辑运算:
    与运算&:与0清零  清零用与运算
    或运算 |:或1置一  置一用或运算
    异或 ^:不同为1
     /*****单个寄存器清零置一********************************************************
    int a =0x00000000;
    int b = 0xffffffff; //默认是32位寄存器
     
    1.让第三位置一  
          a | 0x8 ==> a = a | (0x1<<3)
    2.让第三位清零
    1111 1111 ... 0111 
    b = b & 0xfffffff7 ====>b = b &( ~(0x1<<3))
    3.让b的第三位和第五位都清零
    1111 1111 1111 1111 .... 1101 0111======(0xffffffd7)16
    b = b & 0xffffffd7 ====> (两步):
    b = b & (~(0x1<<3))
    b = b & (~(0x1<<5))
    一步:b = (b & (~(0x1<<3)) ) & (~(0x1<<5))
    练习:
    1.将a的第三位和第四位置一 1100
    a =a | (0x1<<3) a =a | (0x1<<4)
    2.将a的第二位和第三位先清零然后置一
    a = a & (~(0x1<<2)) a = a & (~(0x1<<3)) ===> a & (~(0x1<<2))& (~(0x1<<3)) ==>
    a = a & (~(0x3<<2));
    a = a | (0x1<<2) | (0x1<<3); ===> a = a | (0x3<<2)
    3.将a的第5,4,3,2这四个位分别设置为 0101
    a = a & (~(0x1<<5));
    a = a | (0x1<<4);
    a = a & (~(0x1<<3));
    a = a | (0x1<<2);
     
    /******************************************************************************/
     
     
     
    /******************************************连续的寄存器置一清零(位域)*********************************************/
    位域:操作需要先清零再操作
    1.将a的第5,4,3,2这四个位分别设置为 0101
    a = a & (~(0xf<<2)) ; //先清零 f指的是连续4位为1 2代表从第二位开始 取反之后又为4个0
    a = a | (0x5<<2);      //设置 5指的是0101 2代表从第二位开始
    /*******************************************十六进制与二进制对应表**************************************************/
     
    1 001
    2 010
    3 011
    4 100
    5 0101
    6 0110
    7 0111
    8 1000
    9 1001
    a 1010
    b 1011
    c 1100
    d 1101
    e 1110
    f 1111
     
     
     
  • 相关阅读:
    kmp 算法
    jdk 和 cglib 的动态代理
    RestTemplate工具类
    bat脚本切换多个工程的分支
    字符串的左旋转
    输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。
    枚举类型在JPA中的使用
    拾遗
    YAML DEMO
    kiali 1.26 anonymous策略修改为token
  • 原文地址:https://www.cnblogs.com/renchong/p/5734190.html
Copyright © 2020-2023  润新知