1. void *memset(void *s, int ch, size_t n);
函式解釋:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s 。
memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法 [1] 。
memset()函式原型是extern void *memset(void *buffer, int c, int count) buffer:為指標或是陣列,c:是賦給buffer的值,count:是buffer的長度.
2.考慮對其不同的位進行先後順序不同的設定,因為這樣可能達不到預期的效果,這個不太好總結,但是對暫存器操作的方法是固定的。在這之前,首先要明白邏輯運算子(! && ||)和位運算子(<< >> ~ | ^ &)的區別,對暫存器的操作使用的是位運算子,邏輯運算子一般用於在程式中判斷邏輯中使用。
define reg 0xf0
1)對單個的位進行賦值
(1)將暫存器reg的第5位置「1」
reg |= (1 << 5);
(2)將暫存器reg的第5位清零
reg &= ~(1 << 5);
(3)將暫存器reg的第3和第5位置「1」
reg |= (1 << 5) | (1 << 3);
(4)將暫存器reg的第3和5位清零
reg &= ~( (1 << 5) | (1 << 3) );
該段總結如下:
將某位置1,移位取反後使用位運算」|」
將某位置0,移位取反後,使用位運算」&」
2)直接賦值
(1)將暫存器reg的1、2、3、5、7位置「1」
reg = 0x5e;
(即給暫存器reg1賦值為1010 1110,這種方法多在初始化中使用)
(2)分別將暫存器reg的1、3、5、7位置「1」,0、2位置「0」
u8 temp;
tmep = reg;
temp &= ~0x01; //等價於 temp &= ~(1<<0) 將第0位清零
temp |= (1 << 1);
temp &= ~(1 << 2);
temp |= (1 << 3);
temp |= (1 << 5);
temp |= (1 << 7);
reg = temp;
3.位操作
首先注意 |(按位或)和&(按位與)的基本操作:或1置1,與0置0
其次注意讀法(沒錯,是讀法!)。由於|和&運算均是左結合性,因此需要從左向右讀,
例如:rcc -> ahb1enr |= 1<<2;
上述**的1<<2 應該讀作1向左移動2位,即ahb1enr暫存器的第2位置1。
gpioc -> moder &= ~(3<<(11*2));
上述**應讀作3左移22位,什麼意思呢,也就是11(十進位制的3 == 二進位制的11)左移22位,即第22位、第23位置0。
c語言位操作總結
置位 define bit3 0x1 3 static int a void set bit3 void void clear bit3 void 判斷位是否為1 if a bit3 nt a 1x x 0x1011 把第三位置0 define bitget number,pos number po...
C C 位操作例項總結
c c 對位操作有如下方法 一 位操作運算子 注意 下面幾個運算子不改變原來的變數的值,只是獲得運算的結果即乙個新值 按位取反 位與 位或 位異或 左移位運算子 將乙個運算物件的各二進位制位全部左移若干位 左邊的二進位制位丟棄,右邊補0 若左移時捨棄的高位不包含1,則每左移一位,相當於該數乘以2。右...
位運算的常用操作總結
位運算是乙個神奇的運算,可以很巧妙的解決一些難題,同時速度還非常快。下面將介紹位運算基本的概念,以及位運算的一些常用方法。來自谷歌。這裡需要注意的是,位運算的時候全部都是換算成二進位制的,一般都是32位的長度。2.1 交換兩個數 int x 1,y 2 x y y x x y 2.2 判斷乙個數是不...