zoukankan      html  css  js  c++  java
  • 嵌入式C语言之位运算 &..|.~.>>

    在嵌入式编程中,掌握位运算在操作寄存器的时候很方便,由于之前在上位运算的时候没上,但是由于位运算的难度不是很大,自己编写程序,顺便做些总结.

    &   |   ~ 这三个位运算符号不难理解,但是要区别与逻辑运算符号&&  和||

    1.需要总结的是:假如要使寄存器的值为1的话,一般用 这个寄存器的值来| 上1 比如要将i的值变为1则可以使用    i   |=  1;    意思就是将i的值与上1的值再给i。同理要让一个变量的值变成0的话,将使用 &上0     例如   i&=0;

    2.但是一般寄存器都是用16进制来表示,假如要让寄存器的N位为1  只要将 1<<N位  再       |       这个数即可。假如要让寄存器的N位为0 只要将 1<<N位 ,,,取反 再  &  上这个数

     1 #include<stdio.h>
      2 
      3 int main()
      4 {
      5     unsigned i=0x4590ab34; //01000 0101 1001 0000 1010 1011 0011 0100
      6 
      7     int j= 0x37; // 0011 0111  
      8     int k= 0x42; // 0100 0010
      9     unsigned untj=0x37;  //0011 0111
     10 
     11     printf("j&k is %x
    ",j&k);//0000 0010 02
     12     printf("j|k is %x
    ",j|k);//0111 0111 77
     13     printf("~j %x
    ",~j);// 
     14     printf("~untj %x
    ",~untj);// 1100 1000  c8
     15 
     16     unsigned ret=0;
     17     //将i的第4位置1
     18     ret = i|(1 << 3);
     19     printf("i   is %x
    ",i);
     20     printf("ret is %x
    ",ret);
     21 
     22     //将i的第2位置0
     23     ret = i& ~(1 << 2);
     24     printf("i   is %x
    ",i);
     25     printf("ret is %x
    ",ret);
     26 
     27     //将i的第4---9置1
     28     ret = i|(0x3f << 4);//0011 1111 =3f
     29     printf("i   is %x
    ",i);
     30     printf("ret is %x
    ",ret);
     31 
     32     //将i的第4---9置0
     33     ret = i&~(0x3f << 4);//0011 1111 =3f
     34     printf("i   is %x
    ",i);
     35     printf("ret is %x
    ",ret);
     36 
     37     //将i的第4---7置1 且12-- 15置1
     38     ret = i|(0xf << 4 | 0xf << 12) ;// 1111 =f
     39     printf("i   is %x
    ",i);
     40     printf("ret is %x
    ",ret);
     41 
     42     //将i的第4---9置0 且13-- 15置0
     43     ret = i&~(0x3f << 4 | 0x7 << 13) ;// 00111111 3f  0111 =7
     44     printf("i   is %x
    ",i);
     45     printf("ret is %x
    ",ret);
     46 
     47 }
    ~     

    即可。

    下面是测试的代码

  • 相关阅读:
    样式问题
    布局
    通用模板实现可变参数函数
    使用单例模式实习string类
    动态生成一维数组和二维数组
    自定义的类传数据到主窗口控件上的方法
    使用TableView
    G480折腾上了黑苹果,完美了,哈哈
    error C2383: 此符号中不允许有默认参数
    动态链接库的隐式动态链接和显示动态链接
  • 原文地址:https://www.cnblogs.com/hongzhunzhun/p/4501535.html
Copyright © 2011-2022 走看看