P2數(shù)據(jù)類型(基本數(shù)據(jù)類型)
布爾類型:boolean?
基本介紹:
1) C語言標準(C89)沒有定義布爾類型,所以C語言判斷真假時以0為假,非0為真 [案例]?
2) 但這種做法不直觀,所以我們可以借助C語言的宏定義 。?
3) C語言標準(C99)提供了_Bool 型,_Bool仍是整數(shù)類型,但與一般整型不同的是, _Bool變量只能賦值為0或1,非0的值都會被存儲為1,C99還提供了一個頭文件 <stdbool.h> 定義了bool代表_Bool,true代表1,false代表0。只要導入 stdbool.h ,就 能方便的操作布爾類型了 , 比如 bool flag = false;[了解]?
? 條件控制語句; if?
? 循環(huán)控制語句; while ...

自動類型轉(zhuǎn)換
介紹:
當C程序在進行賦值或者運算時,精度小的類型自動轉(zhuǎn)換為精度大的數(shù)據(jù)類型, 這個就是自動類型轉(zhuǎn)換。
數(shù)據(jù)類型按精度(容量)大小排序為


案例演示:
演示一下基本數(shù)據(jù)類型轉(zhuǎn)換的基本情況。
自動類型轉(zhuǎn)換細節(jié)說明:
1) 有多種類型的數(shù)據(jù)混合運算時,系統(tǒng)首先自動將所有數(shù)據(jù)轉(zhuǎn)換成精度最大的那種數(shù)據(jù)類型, 然后再進行計算(如int型和short型運算時,先把short轉(zhuǎn)成int型后再進行運算)。?
2) 若兩種類型的字節(jié)數(shù)不同,轉(zhuǎn)換成字節(jié)數(shù)大的類型,若兩種類型的字節(jié)數(shù)相同,且一種有符 號,一種無符號,則轉(zhuǎn)換成無符號類型?
3) 在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊的類型將轉(zhuǎn)換為左邊的類型, 如果右邊變量的數(shù)據(jù)類型長度比左邊長時,將丟失一部分數(shù)據(jù),這樣會降低精度,丟失的部 分按四舍五入向前舍入。

強制類型轉(zhuǎn)換?
介紹:將精度高的數(shù)據(jù)類型轉(zhuǎn)換為精度小的數(shù)據(jù)類型。使用時要加上強制轉(zhuǎn)換符 ( ),但可能造成精度 降低或溢出,格外要注意。?
強制類型轉(zhuǎn)換一般格式如下: (類型名) 表達式 什么是表達式: 任何有值都可以稱為表達式,比如 1+ 2, int num = 2; ?這種強制類型轉(zhuǎn)換操作并不改變操作數(shù)本身
案例演示 void main() {
double d1 = 156.89;?
int num1 = (int)d1; ?
}
強制類型轉(zhuǎn)換細節(jié)說明:
1) 當進行數(shù)據(jù)的從 精度高——>精度低,就需要使用到強制轉(zhuǎn)換?
2) 強轉(zhuǎn)符號只針對于最近的操作數(shù)有效,往往會使用小括號提升優(yōu)先級

基本數(shù)據(jù)類型轉(zhuǎn)換-練習題 :
判斷是編譯是否會通過??
char c = 'a'; ?
int i = 5; ?
float d = .314F; ?
double result = c+i+d; // c+i+d 類型是 float -> double ok

我的源碼及注釋:
#include <stdio.h>
//使用宏定義定義布爾類型(自己定義的布爾類型)
#define BOOL int
#define TURE 1
#define FALSE 0
void main(){
int isPass = -1;
//定義一個布爾變量
BOOL isOK = TURE;//等價 int isOK = 1;
if(isPass){//0表示真,非0表示假
printf("通過考試\n");
}
if(isOK){
printf("OKOKOK");
}
getchar();
}
/*
1.C語言標準(C89)沒有定義布爾類型,所以C語言判斷真假時,以0為假,非0為真。
2.但是這種做法不直觀,所以我們可以借助C語言的宏定義。
3.C語言標準(C99)提供了_Bool型,_Bool仍然是整數(shù)類型,但與一般整數(shù)不同的是,_Bool變量只能賦值為0或1,
非0都會被存儲為1,C99還提供了一個頭文件<stdbool.h> 定義了bool代表_Bool,true代表1,false代表0,
只要導入stdbool.h頭文件,就可以方便操作布爾類型,比如 bool flag = true;【vs2010是c89,所以不行哦,c99才可以】
布爾類型常用在 條件控制語句中、循環(huán)控制語句中
*/

/*自動類型轉(zhuǎn)換
精度從低到高順序:short-->int-->unsigned int-->long-->unsigned long-->float-->double-->long double
自動轉(zhuǎn)換規(guī)則:char,short-->int-->unsigned int-->long-->double<--float
//說明:double在這里是最高精度,相同線上都可以轉(zhuǎn)換
細節(jié)說明:
1.多種類型的數(shù)據(jù)混合運算,系統(tǒng)首先自動將 所有數(shù)據(jù)轉(zhuǎn)換成精度最大的那種數(shù)據(jù)類型,然后再計算。
2.若兩種類型的字節(jié)數(shù)不同,轉(zhuǎn)換成字節(jié)數(shù)大的類型,字節(jié)數(shù)相同(且一種有符號,一種無符號),則轉(zhuǎn)換成無符號類型。
3.賦值運算中,右邊數(shù)據(jù)比左邊長,將會丟失一部分數(shù)據(jù),這樣會降低精度(比如double-->float)
*/
#include <stdio.h>
void main(){
char c1 = 'a';
int num1 = c1;
double d1 = num1;
short s1 = 10;
int num2 = 20;
int num3 = s1 + num2;
float f1 = 3.456f;
double d2 = 6.6699336969;
f1 = d2;//會出現(xiàn)精度損失(double-->float)
printf("f1=%.10f",f1);//f1=6.6699337959,精度損失了
getchar();
}

/*強制類型轉(zhuǎn)換
1.高精度轉(zhuǎn)換為低精度會有個 warning警告,提示有精度損失
2.精度高的數(shù)據(jù)類型 轉(zhuǎn)換成 精度低的數(shù)據(jù)類型,需要加上強制類型轉(zhuǎn)換符(然后就不會有warning警告了),
但可能造成精度降低或溢出,要格外注意。
3.強制類型轉(zhuǎn)換一般格式如下:? (類型名) 表達式
【這種強制類型轉(zhuǎn)換操作 并不會改變操作數(shù)本身。也就是說,轉(zhuǎn)換后只是 返回轉(zhuǎn)化后的結(jié)果 并賦值給某個變量,
原來的值和類型沒有任何變化】
*/
//warning是可以運行的,但是在項目中,是不行的,不能要warning
#include <stdio.h>
void main(){
char c1 = 'a';
int num1 = 333;
double d1 = 666;
//計算會把精度 提高到 數(shù)據(jù)類型精度最高的類型
//int取整,會把小數(shù)部分直接截斷(也就是直接丟掉)
int num2 = (int)3.6 * 10 + 8*0.5;//3*10+4.0=34.0(是double類型)-->int類型的34
int num3 = (int)(3.6 * 10 + 8*0.5);//int(3.6*10+4.0)-->int(40.0(double))-->int類型的40
//c1 = d1;//有警告 warning C4244: “=”: 從“double”轉(zhuǎn)換到“char”,可能丟失數(shù)據(jù)
//強制類型轉(zhuǎn)換
c1 = (char)d1;
printf("num2=%d\n",num2);//輸出 num2=34
printf("num3=%d\n",num3);//輸出 num3=40
printf("c1=%d\n",c1);//輸出 c1=-102
//強制類型類型轉(zhuǎn)換后,本身的值和類型都不會變,其他編程語言一般也是這種情況
printf("d1=%f\n",d1);//輸出 d1=666.000000
getchar();
}