老湯回味——C語言基本數據類型及printf打印

C語言是一種強類型語言,也就是說,C語言的變量使用要嚴格符合定義,所有變量都必須先定義後使用。另外,printf必須使用對應的轉換說明符才能打印對應的數據類型數據,下面我們整體瞭解一下。


有符號整型

有符號整型可以用來定義正整數和負整數,有下面幾種類型:

int:最常使用的類型,是系統的基本類型,C語言標準規定,int類型至少16位長。printf中使用%d進行打印。


short或short int:C語言規定,short的長度不應大於最大的int長度,也就是說,short至少16位長,printf中使用%hd打印。


long或long int:長度不應小於int的最大長度,C語言要求至少有32位長。printf打印使用%ld.


long long或long long int:長度不應小於最大的long長度,至少爲64位長。printf使用%lld進行打印。


無符號整型

無符號整型可以用來定義0和正整數。使用unsigned關鍵字修飾上面的有符號整型即可,如unsigned int代表無符號int類型。無符號類型的長度與有符號類型的長度相同,但是由於無符號類型僅用來表示0和正整數,所以無符號整型可以表示更大的正值範圍。printf打印只需要將上面有符號整型的d換爲u即可,如unsigned long可以使用%lu.


字符

字符使用char關鍵字定義,實際C語言將char類型當做一個字節的存儲空間,可以使用unsigned修飾char,printf使用%c打印。


C語言設計之初char主要爲了支持ASCII字符集,爲了支持寬字符集,C語言加入了wchar_t類型,代表一個寬字符,爲此還提供了一套字符串處理函數和文件io函數,作爲擴充,大家可以去了解。


布爾值

_Bool用來表示布爾值,這裏使用非0代表true,0代表false,如果希望更直觀,可以使用stdbool.h中定義的bool,true以及false。使用%d打印。實際C語言開發更喜歡直接使用int來判斷布爾值,非0代表true,0代表false。


實浮點數

float:基本浮點類型,至少精確表示六位有效數字,使用%f打印;

double:更大範圍的浮點數,至少精確表示10位有效數字,使用%lf打印;

long double:更大範圍的浮點數,比double有更多的有效數字位數,使用%llf打印。


複數和虛浮點數

這裏不再介紹,感興趣可以去了解,C語言提供了複數和虛數類型的數據類型,科學計算中使用更多,平時開發一般不會使用。


下面我們寫一個小程序,實現了有符號整型,無符號整型,字符型和實浮點型數據的字節大小和值的打印,C語言提供了一個sizeof運算符,可以用來度量一個變量以及一種類型的字節大小,也就是說,有兩種使用sizeof的方法:

sizeof(類型),如sizeof(int)

sizeof(變量),如sizeof(a)


print_type.c代碼如下:

#include <stdio.h>

int main(void) {
    int a_int = -1;
    short a_short = -2;
    long a_long = -3;
    long long a_long_long = -4;

    unsigned int a_uint = 1;
    unsigned short a_ushort = 2;
    unsigned long int a_ulong = 3;
    unsigned long long int a_ulong_long = 4;

    char a_char = 'c';

    float a_float = 1.0;
    double a_double = 2.0;
    long double a_ldouble = 3.0;

    printf("size of int: %d, value is: %d\n",
                    sizeof(int), a_int);
    printf("size of short: %d, value is: %hd\n",
                    sizeof(short), a_short);
    printf("size of long: %d, value is: %ld\n",
                    sizeof(long), a_long);
    printf("size of long long: %d, value is: %lld\n",
                    sizeof(long long), a_long_long);

    printf("size of unsigned int: %d, value is: %u\n",
                    sizeof(unsigned int), a_uint);
    printf("size of unsigned short: %d, value is: %hu\n",
                    sizeof(unsigned short), a_ushort);
    printf("size of unsigned long: %d, value is: %lu\n",
                    sizeof(unsigned long), a_ulong);
    printf("size of unsigned long long: %d, value is: %llu\n",
                    sizeof(unsigned long long), a_ulong_long);

    printf("size of char: %d, value is: %c\n",
                    sizeof(char), a_char);

    printf("size of float: %d, value is: %f\n",
                    sizeof(float), a_float);
    printf("size of double: %d, value is: %lf\n",
                    sizeof(double), a_double);
    printf("size of long double: %d, value is: %llf\n",
                    sizeof(long double), a_ldouble);

    return 0;
}

在Linux下編譯運行:

$ gcc -o print_type print_type.c

$ ./print_type 

size of int: 4, value is: -1

size of short: 2, value is: -2

size of long: 4, value is: -3

size of long long: 8, value is: -4

size of unsigned int: 4, value is: 1

size of unsigned short: 2, value is: 2

size of unsigned long: 4, value is: 3

size of unsigned long long: 8, value is: 4

size of char: 1, value is: c

size of float: 4, value is: 1.000000

size of double: 8, value is: 2.000000

size of long double: 8, value is: 3.000000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章