C C 基礎 常量,型別轉換

2022-05-21 08:56:06 字數 4228 閱讀 3001

ascii碼表

#includeint main()

}printf("\n\n***************===\n\n");

for(char ch1 = 'a';ch1 <= 'z';ch1++)

return 0;

}

48---0,57--9;

65---a,97--a;

for(char ch = 'a';ch <= 'z';ch++)
for(int i = 0;i <= 10;i++) //1-10 數值

for(char j = 48;j <= 48+9;j++) //第1組輸出的是asc碼

//%c輸出字元所對應的asc碼值

printf("---------------------------\n");

for(char k = '0';k <= '0'+9;k++)

本身已有乙個字元的意義,給他另外乙個別的意義。

字元語義被徵用,回歸本義

有新的需求能通過轉義實現新的功能。

printf("%d %d %d %d\n",'\n','\r','\t','\b');//對應的asc: 10 13 9 8
常量是程式中不可變的量,常以字面量(賦值的數),或者巨集的方式出現(#define pi 3.1415926)。

用途:賦值,運算。

常量的型別:

printf("sizeof(0) == %d sizeof(0.0) == %d \n",sizeof(0),sizeof(0.0));//sizeof(0) == 4 sizeof(0.0) == 8
不同型別的-1在記憶體中存放的補碼。

char ch = -1;//1111 1111

short sh = -1; //1111 1111 1111 1111

int in = -1;//1111 1111 1111 1111 1111 1111 1111 1111

1111 1111

十進位制:255(8,4,2,1計算)

十六進製制:0xff(4位剛好是十六進製制的一位)

八進位制:0377(3位剛好是八進位制的一位)

整型常量:10,8,16進製制數

實型:小數(.)

指數:123.45678=1.2345678e2科學計數法

1.字母e或者e前後必須有數字。

2.字母e或者e後面的指數必須為整數,字母e或者e的前後及數字之間不得有空格。

字元常量:char a = 'a';

字串常量:char aa = "aaa";

printf("格式字串",[輸出列表]);//print:列印format:格式

%d:十進位制輸出

%x:十六進製制輸出

%o:八進位制資料輸出

%f:實行資料輸出

%c:字元型輸出

int aa = 0x66;

printf("%#d",aa);

printf("%#x",aa);

printf("%o",aa);//aa並沒有變只是以進製的形式輸出

printf 中至少有兩類:控制格式,飛哥是字元。

格式字元要求跟輸出一一對應,非格式字元原樣輸出,其作用是原樣輸出,提示,顯示作用。

格式字串:

"%[標誌][輸出最小寬度][.精度][長度]型別"//可以省略
當實際寬度大於所給的寬度,按照實際輸出。

標誌:-(左對齊),+(預設,右對齊)0(不夠補0)#(用於表示進製)

scanf:鍵盤輸入

scanf("%d%d",&d,&d);//天然的間隔:tab enter(結束) 空格,格式串和被輸入的變數一一對應。非格式串,需要原樣輸入。

注意:%c在scanf,中會有點問題,在空格的處理上有點問題。

char a = 'a';

char b = 'b';

scanf("%c%c",&a,&b);//輸入格式字串中本身有三種間隔,超過兩個%c在輸入過程中獲取到了本身的空格。

scanf("%c %c",&a,&b);//解決了,還是有麻煩,空格在中間還可以。(但是輸入的時候很多空格也可以)

getchar,putchar;

char ch;

ch = getchar();//從鍵盤輸入乙個字元

putchar(ch);//輸出乙個字元

putchar(10);//回車,回車的ascii是10

不需要認為參與而產生的預設轉換。

1.整型提公升

2.混合提公升

整型提公升:

char,short,int等型別一起運算時,首先提公升到int。

char ch;short sh;int in;

printf("sizeof(ch)=%d\n",sizeof(ch));//1

printf("sizeof(ch+ch)=%d\n",sizeof(ch+ch));//4

printf("sizeof(sh)=%d\n",sizeof(sh));//2

printf("sizeof(sh)=%d\n",sizeof(sh));//4

printf("sizeof(in)=%d\n",sizeof(in));//4

printf("sizeof(in)=%d\n",sizeof(in));//4

大資料賦值給小資料會溢位,小範圍向大範圍轉由於符號的擴充保證了資料的正確性。

混合提公升:

進行運算時以表示式中最長類為主,將其他型別資料均轉換成該型別。

float 4  double 8

int 4 long long 8

int和float位元組數相同到底是向誰轉化?

float fl = 3.14;

int in = 4;

long long lo = 4;

printf("fl+in=%d\n",%d);//錯誤值

printf("fl+in=%f\n",%d);正確

printf("fl+lo=%d\n",%d);//錯誤

printf("fl+lo=%f\n",%d);正確

說明int=>>>float

long long=>>>float=>>>double

隱式轉換規則:從小向大的方向(不討論溢位,截斷,無符號)

char=>>>short=>>>int=>>>long long=>>>float=>>>double

賦值轉換

int in = 10;

float fl = 3.14;

in = fl;//小數賦值給整數變整數

printf("%d\n",in);//3

fl = in;//整數賦值給小數變小數

printf("%d\n",fl);

強制型別轉換
int a = 10;

int b = 3;

printf("%d\n",a/b);//3由於兩個數都是int沒有變數提公升,要想得到3.3333可以強制型別轉換

printf("%f\n",(float)a/b);

printf("%f\n",a/(float)b);

浮點數跟0的比較

float data = 0.0;

if(data == 0) else

if(data == 0.0) else

//結果都是正確的,但是有問題

double tem = 0.3;

printf("%d\n",(int)(tem*10));會出錯,其他的可以。

printf("%d\n",(int)((tem+0.000001)*10));正確無誤,加上修正值

實際村的是 0.299999 或者0.311111

double tem = 0.0;

if(tem>0-0.000001 && tem < 0+0.000001) else

C C 型別轉換

include include using namespace std int main 程式的執行結果如下 註解 int a 相當於將浮點數a的位址的前sizeof int 個位元組當成int型的資料輸出。float a 1.0f在記憶體中的表示是0x3f800000,當 int a強制轉換時,會...

C C 型別轉換

如果乙個int型的變數值為5,則若使用強制型別轉換或者使用memcpy,則相當於直接copy記憶體中的值,若列印,則會列印5對應的ascii值 而若使用函式轉換,則函式會操作記憶體轉為ascii值的5,若列印,則直接為5。memcpy在一定程度上相當於強制型別轉換,但是可以制定拷貝的位元組大小,因此...

C C 常量資料型別

a l a a l a 10,10u,10l,10ul,012,0xc 3.14,3.14f,3.14l 10,10u,10.10e 2 a 的型別是char,l a 的型別是wchar t,a 的型別是以空字元結尾的char陣列,l a 的型別是以空字元結尾的wchar t陣列。10的型別是int...