程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言--數據類型--取值范圍,--數據類型取值

C語言--數據類型--取值范圍,--數據類型取值

編輯:關於C語言

C語言--數據類型--取值范圍,--數據類型取值


     

 

 

 

C 語言基本數據類型:字符型(char)整形(short, int, long)浮點型(float, double)

 

注:如下類型字節數指一般情況,不同的平台會有所不同,具體平台可以用sizeof 關鍵字測試一下.

 

類型 字節數 類型 字節數 char  1 short 2 int  2(16位系統)或4(32位系統)  long 4 float 4 double 8

 

 

 

 

 

 

 

 

 

 

 


 

類型 范圍 類型 范圍 (signed)char -128~~127 unsigned char 0~~255 (signed)short -32768~~32767 unsigned short 0~~65535 (signed)int -32768~~32767 unsigned int 0~~65535 (signed)long

-2147483648~~2147483647

unsigned long

0~~4294967295

float

 -3.4*10-38 ~~ 3.4*1038

double

 -1.7*10-308 ~~ 1.7*10308

 

 

 

 

 

 

 

 

 

 

 

 


 

1. 運算會導致字符型/整型溢出其取值范圍

eg.

int main() 
{ 
    signed char ch = 127;
    ch += 1;
    printf("%d\n", ch);

    return 0; 
}

輸出結果為:-128,注意,定義ch時賦予的值為127,已經是char能表示的最大數,其最終結果-128的來歷是這樣的:

第一步:首先127在計算機中用二進制表示為:01111111;

第二步:01111111 + 00000001 = 10000000;

第三步:由於ch是帶符號的,當最高位為1時,表示是負數,而負數的計算機中是利用補碼來存儲的,回憶計算負數補碼的方法(首先取負數的絕對值,然後求二進制,對二進制取反,在對取反後的值加1,即為負數的補碼);

第四步:於是根據求補碼的反步驟,我們來求最原始的負數,由於本題中補碼為10000000,首先10000000 - 00000001 = 01111111,然後對01111111取反為10000000,10000000 = 128,由於本身是負數,即ch為-128.

 

eg.

int main() 
{ 
    unsigned char ch = 255;
    ch += 1;
    printf("%d\n", ch);

    return 0; 
}

輸出結果為:0;

其分析為:首先ch = 255提升為整形,在計算機的存儲為:(000....)11111111,然後(000....)11111111+1 = (000...)0001 00000000;然後再將最後的八位二進制截取給ch,由於最後八位全是0,因此ch = 0了。

同理:對於遇到整形int short, long等出現上述情況時,我們也可以這樣分析得到結果.

 

2.用預處理指令#define 聲明一個常數,用以表明1年中有多少秒?

#define SECOND_PER_YEAR (60*60*24*365)UL

 

①#define語法的基本常識(例如:不能以分號結束,括號的使用等等)

  所有宏定義、枚舉常數、只讀變量全用大寫字母命名,用下劃線分割單詞.

  const int MAX_LENGTH = 100; //這不是常量,而是一個只讀變量,具體請往後看

 

    #define FILE_PATH  “/usr/tmp”

②寫出你是如何計算一年中有多少秒而不是計算實際的值,會更有價值

③意識到這個表達式將使一個int數溢出,因此最好用的長整形,那麼你就會為自己加分了

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved