幾篇文章復(fù)習(xí)C語(yǔ)言,摘錄重點(diǎn),僅用于個(gè)人學(xué)習(xí)~

基本數(shù)據(jù)類型
short、int、long、float、double、char這六個(gè)關(guān)鍵字代表C 語(yǔ)言里的六種基本數(shù)據(jù)類型。
基本類型書寫
- 整數(shù)
a,默認(rèn)為10進(jìn)制 ,10 ,20。
b,以0開頭為8進(jìn)制,045,021。
c.,以0b開頭為2進(jìn)制,0b11101101。
d,以0x開頭為16進(jìn)制,0x21458adf。 - 小數(shù)
單精度常量:2.3f 。
雙精度常量:2.3,默認(rèn)為雙精度。 - 字符型常量
用英文單引號(hào)括起來(lái),只保存一個(gè)字符'a'、'b' 、'*' ,還有轉(zhuǎn)義字符 '\n' 、'\t'。 - 字符串常量
用英文的雙引號(hào)引起來(lái) 可以保存多個(gè)字符:"abc"。
字節(jié)長(zhǎng)度
在不同的系統(tǒng)上,這些類型占據(jù)的字節(jié)長(zhǎng)度是不同的(1byte = 8bit):
16位編譯器:
char/unsigned char :1字節(jié)
char :2字節(jié)
short int:2字節(jié)
int/unsigned int:2字節(jié)
long int:4字節(jié)
float:4字節(jié)
double:8字節(jié)*
32位編譯器:
*char/unsigned char :1字節(jié)
char :4字節(jié)
short int:2字節(jié)
int/unsigned int:4字節(jié)
long int:4字節(jié)
float:4字節(jié)
double:8字節(jié)
long long:8字節(jié)
long double:12字節(jié)
64位編譯器:
char/unsigned char :1字節(jié)
char *:8字節(jié)
short int:2字節(jié)
int/unsigned int:4字節(jié)
long int:8字節(jié)
float:4字節(jié)
double:8字節(jié)
long long:8字節(jié)
long double:16字節(jié)
具體可以用sizeof測(cè)試一下即可。
#include <stdio.h>
int main(int argc, const char * argv[]) {
printf("char==%lu\n",sizeof(char));
printf("unsigned char==%lu\n",sizeof(unsigned char));
printf("char *==%lu\n",sizeof(char *));
printf("short int==%lu\n",sizeof(short int));
printf("int==%lu\n",sizeof(int));
printf("unsigned int==%lu\n",sizeof(unsigned int));
printf("long int==%lu\n",sizeof(long int));
printf("float==%lu\n",sizeof(float));
printf("double==%lu\n",sizeof(double));
printf("long long==%lu\n",sizeof(long long));
printf("long double==%lu\n",sizeof(long double));
return 0;
}
//char==1
//unsigned char==1
//char *==8
//short int==2
//int==4
//unsigned int==4
//long int==8
//float==4
//double==8
//long long==8
//long double==16
整型
int 一般占用 4 個(gè)字節(jié)(Byte)的內(nèi)存,共計(jì) 32 位(Bit)。如果不考慮正負(fù)數(shù),當(dāng)所有的位都為 1 時(shí)它的值最大,為 232-1 = 4,294,967,295 ≈ 43億
讓整數(shù)占用更少的內(nèi)存可以在 int 前邊加 short,讓整數(shù)占用更多的內(nèi)存可以在 int 前邊加 long;short、int、long 是C語(yǔ)言中常見的整數(shù)類型,其中 int 稱為整型,short 稱為短整型,long 稱為長(zhǎng)整型。
浮點(diǎn)型

printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
https://www.runoob.com/w3cnote/float-and-double-different.html
原碼,反碼,補(bǔ)碼
數(shù)值的表示方法——原碼、反碼和補(bǔ)碼,在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)存儲(chǔ).
原碼:最高位為符號(hào)位(0正,1負(fù)),其余各位為數(shù)值本身的絕對(duì)值
反碼:
- 正數(shù):反碼與原碼相同
- 負(fù)數(shù):符號(hào)位為1,其余位對(duì)原碼取反
補(bǔ)碼:
- 正數(shù):原碼、反碼、補(bǔ)碼相同
- 負(fù)數(shù):最高位為1,其余位為原碼取反,再對(duì)整個(gè)數(shù)加1
#include <stdio.h>
int main()
{
int x = -1;
//int是四字節(jié),1字節(jié)8位,所以-1有32位,最高位符號(hào)位
//原碼:1000 0000 0000 0000 0000 0000 0000 0001
//反碼:1111 1111 1111 1111 1111 1111 1111 1110
//補(bǔ)碼:1111 1111 1111 1111 1111 1111 1111 1111
int y = 3;//正數(shù)原碼,反碼,補(bǔ)碼全部相同
//int是四字節(jié),1字節(jié)8位,所以-1有32位,最高位符號(hào)位
//原碼:0000 0000 0000 0000 0000 0000 0000 0011
//反碼:0000 0000 0000 0000 0000 0000 0000 0011
//補(bǔ)碼:0000 0000 0000 0000 0000 0000 0000 0011
//求x+y?
//在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)存儲(chǔ),
//x的補(bǔ)碼:1111 1111 1111 1111 1111 1111 1111 1111
//y的補(bǔ)碼:0000 0000 0000 0000 0000 0000 0000 0011
//x+y :0000 0000 0000 0000 0000 0000 0000 0010 -----如果最高位(符號(hào)位)有進(jìn)位,則進(jìn)位被舍棄。
//因此x+y=2
printf("%d\n", x+y);
//總結(jié):負(fù)數(shù):由補(bǔ)碼獲取源碼<=>直接將補(bǔ)碼減1,然后除去符號(hào)位全部取反
return 0;
}
取值范圍
int 一般占用 4 個(gè)字節(jié)(Byte)的內(nèi)存,共計(jì) 32 位(Bit),其中一位是符號(hào)位
所以int取值范圍 2147483648~2147483647 (-231~231-1)

類型轉(zhuǎn)換

不同類型數(shù)據(jù)之間的運(yùn)算要注意精度擴(kuò)展問(wèn)題,一般低精度數(shù)據(jù)將向高精度數(shù)據(jù)擴(kuò)展。
交互
在C語(yǔ)言中,有多個(gè)函數(shù)可以從鍵盤獲得用戶輸入:
scanf():和 printf() 類似,scanf() 可以輸入多種類型的數(shù)據(jù)。%d
getchar()、getche()、getch():這三個(gè)函數(shù)都用于輸入單個(gè)字符。%c
gets():獲取一行數(shù)據(jù),并作為字符串處理。%s
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0, d = 0;
scanf("%d", &a); //輸入整數(shù)并賦值給變量a
scanf("%d", &b); //輸入整數(shù)并賦值給變量b
printf("a+b=%d\n", a+b); //計(jì)算a+b的值并輸出
scanf("%d %d", &c, &d); //輸入兩個(gè)整數(shù)并分別賦值給c、d
printf("c*d=%d\n", c*d); //計(jì)算c*d的值并輸出
return 0;
}
//123
//123
//a+b=246