ARM学习随笔(1) 位操作

由于刚开始学习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)默认为有符号

 

位操作是一个很方便的操作,要深刻体会。

你可能感兴趣的:(ARM学习随笔,ARM学习随笔)