ARM学习随笔(1) 位操作
2014-07-19 13:23
239 查看
由于刚开始学习ARM,看到很多<<这个符号,虽然想到了是左移,但是还有点茫然。
经过百度之后,才明白P0|=1<<3;就相当于把P0^3置1
原因如下:
1=00000001;
1<<3=00001000;
P0|00001000即将P0^3=1;(P0|=1<<0;即P0^0=1;)
而想要置0 的话,只要这样做就好:P0 &=~(1<<0);(即P0^0=0);
【其中,&还有其他意思,在此一并说明,C语言中&也表示取地址。int m = (unsigned int)&i;即对i取地址,强制转化为无符号型int,然后赋值给m】
还有如果管脚是输入状态,要知道P0口某一位的值,则可以如此做:
P0&(1<<7)==(1<<7) 表示P0的第七位为1,否则P0的第7位为0;
这是由于x与0为0,x与1为x。
取反操作细节:
对于char、bool、unsigned char等低于int字节数的类型,进行运算的时候首先进行提升,因此在进行~t运算之前,先要将其放入32位寄存器,由于是unsigned char,因此前面补位全补0,因此0xa5-->0x000000a5,然后取反为0xffffff5a,然后再向右移四位为0xfffffff5,然后再转化为unsigned
char型的0xf5赋值给i,因此最后输出结果为0xf5。
unsigned char、char、bool等低于int型的类型,进行运算的时候都要先提升再运算,提升时根据signed和unsigned,在前面补位为0或者1,若是unsigned,则直接前面全补0;若为signed,则根据最高位为0还是1,若为0则全部补位为0,若为1则全部补位为1。
~(1<<10)默认为有符号
位操作是一个很方便的操作,要深刻体会。
经过百度之后,才明白P0|=1<<3;就相当于把P0^3置1
原因如下:
1=00000001;
1<<3=00001000;
P0|00001000即将P0^3=1;(P0|=1<<0;即P0^0=1;)
而想要置0 的话,只要这样做就好:P0 &=~(1<<0);(即P0^0=0);
【其中,&还有其他意思,在此一并说明,C语言中&也表示取地址。int m = (unsigned int)&i;即对i取地址,强制转化为无符号型int,然后赋值给m】
还有如果管脚是输入状态,要知道P0口某一位的值,则可以如此做:
P0&(1<<7)==(1<<7) 表示P0的第七位为1,否则P0的第7位为0;
这是由于x与0为0,x与1为x。
取反操作细节:
对于char、bool、unsigned char等低于int字节数的类型,进行运算的时候首先进行提升,因此在进行~t运算之前,先要将其放入32位寄存器,由于是unsigned char,因此前面补位全补0,因此0xa5-->0x000000a5,然后取反为0xffffff5a,然后再向右移四位为0xfffffff5,然后再转化为unsigned
char型的0xf5赋值给i,因此最后输出结果为0xf5。
unsigned char、char、bool等低于int型的类型,进行运算的时候都要先提升再运算,提升时根据signed和unsigned,在前面补位为0或者1,若是unsigned,则直接前面全补0;若为signed,则根据最高位为0还是1,若为0则全部补位为0,若为1则全部补位为1。
~(1<<10)默认为有符号
位操作是一个很方便的操作,要深刻体会。
相关文章推荐
- ARM学习随笔(4)芯片选择
- ARM学习随笔(6)volatile以及对(*(volatile unsigned long *))的理解
- Ubuntu_用户操作学习随笔
- ARM学习随笔(7)keil下Flash magic的使用
- ARM学习随笔(12)定时器查询方式和中断方式
- ARM学习随笔(11)中断学习深入之按键去抖
- Java学习随笔4:Java的IO操作
- ARM学习随笔(5)datasheet阅读技巧
- ARM学习随笔(10)中断的学习
- ARM学习随笔(16)定时器的使用
- ARM学习随笔(9)按键检测程序
- arm-linux学习笔记3-linux内存管理与文件操作
- ARM学习随笔(2)关于位域的一些事
- ARM学习随笔(8)LPC2132GPIO的理解
- jquery学习随笔(DOM节点操作)
- ARM学习随笔(14) I2C转UART之SC16IS740
- 学习ARM开发(3)
- 随笔之:VC操作Word系列(三)
- 昨晚开始了为期3个月的初级德语课,课上大家跟老师咿咿呀呀,仿佛回到了蒙学时代,感觉还是不错的!在blog里增加一个GERMAN随笔分类主要是方便自己随时学习,勿怪!Vielen Dank!
- 学习ARM开发(2)