c語言 型別轉換

2021-09-01 11:47:58 字數 1897 閱讀 9222

關於資料型別的相關轉換,我們可以總結出三種情況。下面我們就來詳細的說一下具體情況和相關例題吧~

說到資料型別轉換我們首先要說說相關資料型別。

double   8位元組

longlong 8位元組

float 4位元組

long 4位元組

int 4位元組

short 2位元組

char 1位元組

以上型別從上往下資料型別寬度變窄

預設情況下資料由窄型別轉寬型別,左邊補符號位,無符號左邊補0!

例題1:

有符號的-1  1111 1111  ——————> 1111 1111 1111 1111 1111 1111 1111 1111

無符號的255 1111 1111 ——————> 0000 0000 0000 0000 0000 0000 1111 1111

例題2:

請問程式輸出的是什麼?

char a = 0x76;

printf("%x\n", a<<8 | 0x12);

求解:輸出7612

因為0x表示16進製制,所以資料型別預設的由char窄型別轉換為int的寬型別,始終注意!!int型別時4位元組不是1位元組所以a<<8不是0是7600。7600 | 12 其結果就為0x7612.

例題講解:

請問程式輸出的是什麼?

int main()

求解:輸出 78,-24,-24;20,00 00 00 00 00 00 00 14,ff ff ff ff ff ff ff 14

分析原因:

注意:

%x 和 %08x 的區別在於前面是補充1還是f

例題講解:

#include>

int main()

輸出結果為:-59,-1,-1,197,255,255

分析:

char a = 197; //1100 0101(負數) --->-59

char b = 255; //1111 1111(負數) --->-1

char c = -1; //1111 1111(負數) --->-1

無符號的數所有位數表示數值

unsigned char e = 197;

unsigned char f = 255;

unsigned char g = -1

例題:

#includeint main()

(1)執行時會輸出什麼資訊?

(2)如果將程式第4.5行改為c1 = 197;c2=198;執行時會輸出什麼資訊?

(3)如果將程式第三行改為int c1,c2;執行時會輸出什麼資訊?為什麼?

求解:

(1)

a,b97,98

(2)?,?

-59,-58

1100 0101(負數,因為char型別只有乙個位元組,最高位表示符號位) = -59

1100 1010(負數) = -58

(3)?,?

197,198

1100 0101(正數,因為int型別有四個位元組,這裡的最高位不表示符號位) = 197

1100 1010(正數) =198

c語言型別轉換

c語言型別轉換 自動型別轉換 預設型別轉換,隱式轉換,編譯器幫你完成 和 強制型別轉換 自己轉成自己想要的型別 自動型別轉換最常見的有 混合運算 賦值運算 和函式值的型別轉換 賦值運算 就是把 右邊的表示式的型別 轉換成 左邊 的表示式的型別。混合運算 指在乙個表示式中參與運算的物件不是同一種資料型...

C語言型別轉換

一 在算數表示式中,低型別轉換為高型別 signed char a 0xe0 unsigned int b a unsigned char c a 同等位數的型別進行賦值時,不會改變在其記憶體的儲存形式,所以第三行語句 c 的位儲存形式還是0xe0 位擴充套件 當 a 和 c 進行比較的時候,由於兩...

C語言 型別轉換

目錄 自動型別轉換 1.整形 2.浮點型 3.賦值 強制型別轉換 乙個表示式 現不同型別間的混合運算,較低的型別會自動向較高的型別轉換。一般情況下,資料表示的範圍越大,精度越高,級別越高。運算過後,型別保留,高位丟棄,只取 型別位元組大小的 低位。自動型別轉換順序 signed char unsig...