C語言易漏知識點(一)自動轉換和強制轉換 位運算

2021-10-18 16:20:40 字數 1944 閱讀 4914

單精度型別(float)

雙精度型別(double)

4位元組(32位)

8位元組(64位)

實數提供7位有效數字

提供15~16位有效數字

實型常量:不分float型和double型,乙個實型常量可以賦給乙個float或double型變數,但變數根據其自身型別擷取實型常量中相應的有效數字。

儲存字元對應的ascll到記憶體單元中。字元型資料與整形資料之間可以通用,乙個字元能用字元的形式輸出,也能用整數的形式輸出。字元型資料進行算術運算,相當於對它的ascll進行運算。

char n;

n=『a』;

printf("%d",n);

當同一表示式中各資料的型別不同時,編譯程式會自動把它們轉變成同一型別後再進行計算。

轉換優先順序為charchar a;

a=『a』;

int b;

b=a;

printf("%d",b);

表現形式:(資料型別)(表示式);

char n;

int a=(int) n;

char a;

a=『a』;

int b;

b=(int)a;

printf("%d",b);

按位與 「&」:若兩個相應的二進位制位都為1,則該位的結果為1,否則為0;

如,13&1

00001101

&00000001

00000001

按位或 「|」:若兩個相應的二進位制位中有乙個為1,則該位的結果為1,否則為0;

如,13 | 1

00001101

|00000001

00001101

按位異或^:兩個二進位制位相同,為0,否則為1;

按位求反"~":0變1,1變0;

求反主要用於負數的補碼與原碼的轉換。

原碼,反碼,補碼。

計算機儲存主要用補碼,正數的反碼和補碼是其原碼,負數的補碼是其絕對值的反碼加一,負數的補碼轉換為原碼減一取反。

如, ~12

取反前: 00001100 (12) 原碼

取反後: 11110011 (-13) 反碼

11110100 (-12)補碼

再變回原碼,減一取反

00000011

00001100

左移"<<":將乙個數的二進位制位全部左移若干位,右邊便有空位,使空位補0;

如, 12<<2

左移前 : 00001100

左移後 : 00110000

右移">>":將乙個數的二進位制位全部右移若干位,同左移相似,左邊便有空位,因為涉及到正負符號問題,負數時空位補1,正數時空位補0;

如,-12>>2

10001100

11000110 (右移一位後)-6

11100011 (右移兩位後)-3

int a=-12,b,c;

b=a>>1;

c=a>>2;

printf("%d\n%d",b,c);

-6

-3

其實,左移相當於模擬乘法,右移相當於模擬除法,每左移一位相當於乘2,左移n位,相當於乘2的n次方;右移同理。實際應用中適應於硬體的實現。

說明:位運算物件只能為整型或字元型資料,不能為實型資料。

c語言中,易錯知識點

1.結構體的計算 struct bbb p sizeof struct bbb 16 int main 2.結構體中結構體,共用體中結構體的大小 union aaahalf short kk number struct bbbhalf struct tagccc half long kk 結構體是個...

C語言知識點(一)

型別 是對資料的抽象 型別相同的資料有相同的表示形式 儲存格式以及相關的操作 程式中使用的所有資料都必定屬於某一種資料型別 資料型別的本質思考 思考資料型別和記憶體有關係嗎?c c 為什麼會引入資料型別?從編譯器的角度來考慮資料型別問題,才會發現它的本質。資料型別可理解為建立變數的模具 是固定記憶體...

C語言指標與陣列易混淆知識點(一)

指標 指標本身也是乙個變數,它的內容是指向的內容的位址。指標同樣有型別的區分,char 的指標只能指向char型資料,int 指標指向int型資料。但是指標所佔記憶體單元的大小 即其內容 是跟作業系統的位址位數有關,比如32位位址的系統,那麼指標所佔的記憶體單元就是4個位元組,16位就是2個位元組,...