P2.數(shù)據(jù)類型 (基本數(shù)據(jù)類型)
整數(shù)類型?
基本介紹:
C語言的整數(shù)類型就是用于存放整數(shù)值的,
比如 12 , 30, 3456等等?
案例演示: int num = 10;


3) C語言的整型類型,分為有符號 signed 和無符號 unsigned 兩種,默認是 signed ?
4) C程序中整型常聲明為int型,除非不足以表示大數(shù),才使用long long
5) bit(位): 計算機中的最小存儲單位。byte(字節(jié)):計算機中基本存儲單元。 1byte = 8bit [?二進制再詳細說,簡單舉例一個 short 3 和 int 3 ]
示意圖:?
short 3 在內(nèi)存中占有 2字節(jié)?
int 3 在內(nèi)存中占有 4個字節(jié)
我的源碼及注釋:?
#include <stdio.h>
void main(){
//int 默認就是帶符號整數(shù)(signed int)(就是分整數(shù)和負數(shù))
int num = -2147483648;
signed int num2 = 2147483648;//越界,就不會得到我們想要的結果
long num3 = 666;
long int num4 = 2147483648;
long long num5 = 12147483648;
//查看系統(tǒng)int類型有幾個字節(jié),sizeof(類型或變量名都行),查看字節(jié)數(shù),
printf("int的字節(jié)數(shù)=%d\n",sizeof(int));//輸出 int的字節(jié)數(shù)=4
printf("num=%d num2=%d\n",num,num2);// 輸出 num=-2147483648 num2=-2147483648
printf("long型字節(jié)數(shù)=%d long int型字節(jié)數(shù)=%d long long型字節(jié)數(shù)=%d\n",sizeof(num3),sizeof(num4),sizeof(long long));
//輸出long型數(shù)據(jù)是要加上l(%ld),long long型加上兩個ll(%lld),不加就會得不到正確結果(和沒寫long long一樣)
//雖然在我電腦上long型和int型都是4個字節(jié),寫不寫%ld一樣(但是在其他系統(tǒng)不一定一樣,比如linux),%lld必須寫,所以都要給我寫上
printf("num3=%ld num4=%ld num5=%lld",num3,num4,num5);//輸出 num3=666 num4=-2147483648 num5=12147483648
getchar();
//以我系統(tǒng)為例
//有符號整數(shù)int默認是signed int,它們就是一個東西,所以基本上全都用int,很少用signed int
//4個字節(jié),32個bit,int范圍:-2^31 到 2^31-1(-2147483648 到 2147483647),因為第一個要表示符號(正負號)
//無符號整數(shù)(unsigned int) 0 到 2^32-1(0到4294967295)(因為沒有符號啦,全是正數(shù))
//其他類型差不多一樣
}
/*
注意:
1.各類型是存儲大小與操作系統(tǒng)、系統(tǒng)位數(shù)和編譯器有關
signed char 1個字節(jié) -2^7 到 2^7-1
unsigned char 1個字節(jié) 0到2^8-1? 無符號字符類型數(shù)據(jù)
//整型
int(或是signed int) 2或4個字節(jié) 2字節(jié)的范圍(-2^15到2^15-1) 4字節(jié)范圍(-2^31到2^31-1)
unsigned int 2或4個字節(jié) 2字節(jié)的范圍(0到2^16-1) 4字節(jié)范圍(0到2^32-1)
//短整型
short(signed short) 2個字節(jié) -2^15 到 2^15-1
unsigned short 2個字節(jié) 0到2^16-1
//長整型
long(signed long) 4個字節(jié) (-2^31到2^31-1)
unsigned long 4個字節(jié) (0到2^32-1)
還有很多
long long 8個字節(jié)
long int 4個字節(jié)
2.C語言中整數(shù)類型,分為有符號(signed)和無符號(unsigned)兩種。默認是signed(也就是說 不指定就是signed)
3.C程序中整型數(shù)據(jù)常聲明為 int型,除非不足以表示大的數(shù),才使用long long
4.比特(bit)(位):計算機最小存儲單位。字節(jié)(byte):計算機基本存儲單元。1byte=8bit
5.short型的數(shù)據(jù)3占有 2個字節(jié),但是int型的數(shù)據(jù)3占有 4個字節(jié)
*/


浮點類型?
基本介紹 C語言的浮點類型可以表示一個小數(shù),比如 123.4 ,7.8 ,0.12等等?
案例演示:?
void main() {?
double salary = 10000.56;?
double num1 = 1.3;?
double num2 = 4.5;?
double sum = num1 + num2;?
printf(" sum = %.2f" , sum);//?
getchar();?
}

浮點型的分類?

說明一下:?
1) 關于浮點數(shù)在機器中存放形式的簡單說明,
浮點數(shù)=符號位+指數(shù)位+尾數(shù)位 , 浮點數(shù)是近視值?
2) 尾數(shù)部分可能丟失,造成精度損失。

浮點型使用細節(jié):
1) 浮點型常量默認為double型 ,聲明float型常量時,須后加‘f’或‘F’。?
2) 浮點型常量有兩種表示形式 十進制數(shù)形式:如:5.12 512.0f .512 (必須有小數(shù)點) 科學計數(shù)法形式:如:5.12e2 、 5.12E-2 ?
3) 通常情況下,應該使用double型,因為它比float型更精確。
4) printf("d1=%f ", d1); // 在輸出時,默認保留 小數(shù)點6位
我的源碼及注釋:?
#include <stdio.h>
#include <stdlib.h>
void main(){
//浮點型默認是double類型,聲明float類型時,需要加f或F
float f1 = 69.69696969;//默認是double類型。(編譯鏈接時的提示:從“double”到“float”截斷,就是說double到float丟失精度)
float f2 = 69.69696969f;//這樣才是單精度float型
double f3 = 69.69696969f;//
double f4 = 69.69696969;//這才是該要的
double f5 = 5.12E2;
double f6 = .512e-3;
printf("f1=%f f2=%.15f f3=%.15f f4=%.15f f5=%f f6=%f\n",f1,f2,f3,f4,f5,f6);//這里的f要小寫才行
//輸出 f1=69.696968 f2=69.696968078613281 f3=69.696968078613281 f4=69.696969690000003 f5=512.000000 f6=0.000512
//窗口暫停
system("pause");
}
/*
細節(jié):
1.浮點型默認為double型,聲明float變量是,須在數(shù)后加 F或f(大小寫都行)
2.浮點類型兩種表示形式:十進制形式:5.12,5.12f, .512(和0.512一樣,0開頭的小數(shù),0可以省略不寫)
3.一般情況,應該使用double類型,因為它比float更加精確
4.printf("d=%f",d1);//輸出時,默認保留小數(shù)點后6位。
*/


字符類型(char)?
基本介紹 :
字符類型可以表示單個字符,字符類型是char,char是1個字節(jié)(可以存字母或者數(shù)字), 多個字符稱為字符串,在C語言中 使用 char數(shù)組 表示,數(shù)組不是基本數(shù)據(jù)類型,而是 構造類型[關于數(shù)組我們后面詳細講解.]?
案例演示:?
void main() {?
char c1 = 'A';?
char c2 = '0';?
char c3 = '\t';
printf("c1=%c c3=%c c2=%c", c1, c3, c2); //%c 表示以字符的形式輸出?
getchar();
}

字符類型使用細節(jié):
1) 字符常量是用單引號('')括起來的單個字符。例如:char c1 = ?'a'; char c3 = '9'; ?
2) C中還允許使用轉義字符‘\’來將其后的字符轉變?yōu)樘厥庾?符型常量。例如:char c3 = ‘\n’; // '\n'表示換行符?
3) 在C中,char的本質(zhì)是一個整數(shù),在輸出時,是ASCII碼對應 的字符。?
4)可以直接給char賦一個整數(shù),然后輸出時,會按照對應的 ASCII 字符輸出 [97]?
char c1 = 'a';?char c2 = 'b';?char c3?= 97;
5) char類型是可以進行運算的,相當于一個整數(shù),因為它都對 應有Unicode碼. ?
char ch = 'a';
int num= ch + 1;

字符類型本質(zhì)探討:
1) 字符型 存儲到 計算機中,需要將字符對應的碼值(整數(shù))找出來 存儲:字符'a'——>碼值 (97)——>二進制 (1100001)——>存儲() 讀?。憾M制(1100001)——>碼值(97)——> 字符'a'——>讀取(顯示)?
2) 字符和碼值的對應關系是通過字符編碼表決定的(是規(guī)定好)

ASCII 碼介紹(了解)?
1) 在計算機內(nèi)部,所有數(shù)據(jù)都使用二進制表示。每一個二進制位(bit)有 0 和 1 兩種狀態(tài), 因此 8 個二進制位就可以組合出 256 種狀態(tài),這被稱為一個字節(jié)(byte)。一個字節(jié)一共 可以用來表示 256 種不同的狀態(tài),每一個狀態(tài)對應一個符號,就是 256 個符號,從 0000000 到 11111111。?
2) ASCII碼:上個世紀60年代,美國制定了一套字符編碼,對英語字符與二進制位之間的關系, 做了統(tǒng)一規(guī)定。這被稱為ASCII碼。ASCII碼一共規(guī)定了127個字符的編碼,比如空格“SPACE” 是32(二進制00100000),大寫的字母A是65(二進制01000001)。這128個符號(包括32 個不能打印出來的控制符號),只占用了一個字節(jié)的后面7位,最前面的1位統(tǒng)一規(guī)定為0。?
3) 看一個完整的ASCII碼表 [自己百度 看表]?
4) 缺點:?
1.不能表示所有字符。?
2.相同的編碼表示的字符不一樣:比如,130在法語編碼中代表了é,在希伯來語編碼中 (?) 卻代表了字母
我的源碼及注釋:
#include <stdio.h>
void main(){
char c1 = 'a';
char c2 = 'b';
//以%c輸出c3時,就會按照ASCll編碼表97對應的字符輸出。
char c3 = 97;
int num = c2 + 3;
//【非常注意,vs2010編譯器是c89,所以要求變量的定義,必須在執(zhí)行語句之前】
printf("c1=%c c1對應的整數(shù)=%d c2=%c c2對應的整數(shù)=%d c3=%c c3對應的整數(shù)=%d num=%c num對應的整數(shù)=%d",c1,c1,c2,c2,c3,c3,num,num);
//c1=a c1對應的整數(shù)=97 c2=b c2對應的整數(shù)=98 c3=a c3對應的整數(shù)=97 num=e num對應的整數(shù)=101
getchar();
}
/*
字符型數(shù)據(jù) 存儲到計算機中,首先需要將字符對應的碼值(整數(shù))找出來。
以a舉例:
存儲:字符('a')-->碼值(97)-->二進制(1100001)-->存儲
讀?。憾M制(1100001)-->碼值(97)-->字符('a')-->讀取(顯示)
*/