C語言中的資料型別及其轉換詳解

2021-07-09 13:00:43 字數 1589 閱讀 3214

1. c語言中的資料型別

c語言中的型別按其組成可以分為簡單型別和構造型別,按是否預定義了型別名字和值集可以分為基本型別和非基本型別,按是否加了型別限定符可以分為限定型別和非限定型別。

ansi c99標準中型別定義的bnf語法如下圖。

說明:

1

#define pointer int *;

2 pointer a,b;

ansi c99標準中規定的資料型別如下圖所示。

說明:

3. c語言中資料型別的轉換

型別轉換分為顯示和隱式兩種,前者比較簡單,這裡只講後者。下面是c99標準中給出的各種型別物件的基本轉換規則:

整型別:short int/char/列舉型別/位域型別都可轉換成int,如果超出int表示範圍,則提公升到unsigned int。

對於二元運算子中的普通算術運算轉換,c99標準給出了如下圖所示的轉換規則:

說明:

4. 測試練習

1

char a = 0xb6;

2short b = 0xb600;

3int c = 0xb6000000;4 5

if ( a == 0xb6) puts("

a");

6if ( b == 0xb600) puts("

b");

7if ( c == 0xb6000000) puts("

c");

答案:

在vc或x86的gcc下,只會列印出 c ,而linux的gcc則會列印出a和c。

解釋:char在前兩者預設是signed char,而後者預設是unsigned char。因此當整型提公升時,在前兩者的編譯器下,三條語句分別變成如下情況:

1

if ( 0xffffffb6 == 0x000000b6) puts("

a");

2if ( 0xffffb600 == 0x0000b600) puts("

b");

3if ( 0xb6000000 == 0xb6000000) puts("

c");

而在linux的gcc編譯下,則是下面的情況:

1

if ( 0x000000b6 == 0x000000b6) puts("

a");

2if ( 0xffffb600 == 0x0000b600) puts("

b");

3if ( 0xb6000000 == 0xb6000000) puts("

c");

C 資料型別及其轉換詳解

前言 在c 中,資料型別可以分為以下幾種型別 值型別 value types 引用型別 reference types 指標型別 pointer types 其中指標型別只在不安全 下使用,一般不涉及所以今天不討論。我們主要 引用型別和值型別。一 基本定義 值型別的變數在宣告後,系統直接在託管棧中為...

C 語言中的資料型別

1.1基本資料型別 字元型 char 短整型 short int 整型 int 長整型 long int 單精度浮點型 float 雙精度浮點型 double 1.2復合資料型別 陣列,結構體。字元型 char a 1 1個位元組 短整型 short int 2個位元組 整型 int 4個位元組 長...

C語言中的資料型別

常量,表示一些固定的資料 1 整型常量 int 包括了所有的整數,比如6 27 109 256 10 0 289等 2 浮點型常量 float double 浮點型常量分為double和float兩種資料型別 u double 雙精度浮點型,其實就是小數。比如5.43 2.3 0.0等 注意,0.0...