我們已經看過以下幾種資料型態 (Data Type),它們的資料含量 (Data Size) 是指每個屬於這種型態的變數,在記憶體中佔據幾個 byte。 以下我們列出所有內建資料型態、和一般編譯程式所定的資料含量。 對每種機器、每種編譯程式,要用 sizeof() 來看看這些資料型態的實際含量。
注意,某些編譯器設定 char 資料型態等同於 unsigned char。 可以用以下方法測試:
#include <stdio.h>
/* 測試 char 是 signed 還是 unsigned (test-char.c) */
main() {
char c=0;
int i, n;
for (i=0; i<256; ++i) {
if (!(i%16)) putchar('\n');
n = c;
printf("%d ", n);
++c;
}
putchar('\n');
}
宣告成非負型態的變數,還是可以定義負數給它。 但是,那個負數是以二補數方法組成的位元組, 而同樣的位元組,又被解釋成正整數。例如以下程式的輸出是 255。
#include <stdio.h>
main() {
unsigned char c=-1;
printf("%d\n", c);
}
將 char 或 short 型態之變數值設定給 int 型態之變數時, 在數值上不會有誤差。但是將 int 型態之變數值設定給 char 或 short 型態之變數時, 只取 int 的最小 1 個或 2 個 bytes 交給 char 或 short 型態之變數, 並由接收者自行解釋那位元組所代表的數值。 例如以下程式的輸出是
66047 511 -1(65536 是 216,256 是 28,255 的二進制數字是 11111111)
#include <stdio.h>
/* 測試 int 型態到 char 和 short 的資料轉換 (int2char.c) */
main() {
int i=65536+256+255;
char c=i;
short s=i;
printf("%d %d %d\n", i, s, c);
}
習題
int isleap(int);參數是一個西元年份,如果是閏年返回 1 (True),否則 0 (False)。 年份需 > 1752。否則一律返回 0。
注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。
Created: Apr 21, 2000
Last Revised: Apr 21, 2000
© Copyright 2000 Wei-Chang Shann 單維彰