位操作總結

2021-09-09 01:10:34 字數 1496 閱讀 4340

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 判斷乙個數是不...