C語(yǔ)言-基本數(shù)據(jù)類型

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

基本數(shù)據(jù)類型.png

基本數(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)型

image.png
   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

https://www.136.la/jingpin/show-64808.html

#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)


image.png

類型轉(zhuǎn)換

類型轉(zhuǎn)換規(guī)則.png

不同類型數(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容