C语言中数据类型大致可分为两类:基础数据类型和复杂数据类型。

基础数据类型,总的来说分为两种:整型和浮点型。

1. 整型数据

顾名思义,整型数据就是指没有小数的数字。如122,-33等。他们都没有小数。

整型数据的类型关键字为int。根据计算机硬件及操作系统的不同,int类型的在内存中占用的空间大小不同。对于现代计算机而言,int类型通常占用4字节,即32位。可以使用sizeof运算符得到当前系统环境下int类型占用的内存数。

unsigned long size = sizeof(int);

printf("int 类型占用 %lu 个字节\n”,size);

程序输出:int类型占用 4 个字节。

但仅有一中长度的整型数据,显然不能满足左右程序的要求,有些程序需要很短的整型,有些程序又需要很长的数据类型,因此就衍生出了整型限定符。

1.1 短整型:short

在某些程序中,只需要很小的整数,因此用4个字节来存储就有点浪费内存了。因此C语言给出了short关键字,用来表示一个短整型数据。如下所示:

short int an = 12;

为了书写方便,通常省略int,而简写成:

short an = 12;

C语言并没有规定短整型在内存中占用多大的空间,而只规定了short占用的内存空间不能多于int类型。

1.2 长整型:long

有些程序需要比较大的整型数据,而int类型不够用,因此C语言给出了long关键字,用来表示一个长整型数据。如下所示:

long int bn = 222433;

为了书写方便,通常省略int,而简写成:

long bn = 222433;

C语言也没有规定long类型在内存中占用多大的空间,而只规定了long占用的内存空间不能少于int。

1.3 长长整型:long long

在C11标准中,提出了更长的整型类型,long long int(通常简写成long long ),它在内存中占用的空间通常比long类型多。因此能表示更大范围的整型数据。

1.4 有/无符号限定符:signed和unsigned

整型数据都是有符号的,其数值可以是正数,也可以是负数。有符号整型,其完整定义如下所示:

signed int  si= 12;

signed short ss = 12;

signed long sl = 12;

C语言中,整型数据默认的都是有符号的。因此,对于一个有符号的整型数据,通常不写signed,而只用关键字。如下所示:

int si = -19;

short ss = -19;

long sl = -19;

有些变量永远不可能为负数,因此就可以使用unsigned的关键字,表明变量为无符号的整数。如下所示:

unsigned int  uiwrong= -12; (编译器报错:usigned int类型的数值不能为负数)

unsigned int ulright= 334;(编译通过)

有符号和无符号的整数,其在内存中占的空间大小相同,但有符号的整型,其二进制的最高位表示符号,剩下的位数才表示数值,而无符号的整型,其全部位都用来表示数值。

2. 字符型数据:char

C语言中所有字符均使用ASCII码,而ASCII码实际上是将字符映射为一个整数。因此字符型数据,实际上也是整型。

字符型数据在内存中占用1个字节,字面量用一对单引号给出,或直接给出ASCII码,如下所示:

char c = ‘a’;

char d = 97;(97为字符a的ASCII码)。

但是需要注意一点,char类型没有符号,因此不能使用unsigned关键字修饰。

3. 布尔型数据

C语言并没有单独的布尔型数据,当值为0时,则表示“假”,值不为0时则表示“真”。

4. 浮点型数据

C语言提供了三种浮点型数据。需要注意的是,浮点型数据只是近似值,而不是准确的值。

4.1 单精度浮点型:float

float类型在内存中占用4字节,它只能表示6位有效数字,第7位数字准确度无法保证。定义浮点数据,其字面量后面应写上f,如下所示:

float f_value = 3.23f;

4.2 双精度浮点型:double

double类型在内存中占用8字节,它能表示15位的有效数字。其定义如下:

double d_value= 2.394;

5. 类型转换符

在C语言看来,一切数据都为都是数字,其本质就是二进制的0和1。当需要输出某个数据时,就需要将二进制数以指定的格式输出。例如数字65,其二进制数位0100 1010。如果以十进制输出,则输出为65;如果以字符输出,则输出为字母A。因此,在C语言中,输出数据时,必须使用正确的类型转换符。

5.1 整型

int an = 65;

printf(“%d”,an);    //%d为int类型的输出类型转换符。

5.2 短整型

short bn = 65;

printf(“%hd”,bn);    //%hd为short类型的输出类型转换符;

5.3 长整型

long cn = 65;

printf(“%ld”,cn);    //%ld为long类型的输出转换符;

5.4 长长整型

long long dn = 65;

printf(“%lld”,dn);    //%lld为long类型的输出转换符;

5.5 无符号

unsigned int an = 13;

printf(“%u",an);    //%u为unsigned int类型的输出转换符;

unsigned short bn = 12;

printf(“%hu\n",bn);    //%hu为unsigned short类型的输出转换符;

unsigned long cn = 23;

printf(“%lu\n",cn);    //%lu为unsigned long类型的输出转换符;

unsigned long long dn = 65;

printf("%llu",dn);    //%llu为unsigned long long类型的输出转换符;

5.6 字符型

char en = ‘a’;

printf(“%c”,en);    //%c为char类型的输出转换符;

5.7 十六进制输出:

int an = 93;

printf(“%x”,an);    //%x表示以十六进制输出整型数据。

printf(“%#x”,an);    //%#x表示以十六进制输出整型数据,并输出十六进制的前缀0x;

5.8 八进制输出:

int an = 93;

printf(“%o”,an);    //%o表示以八进制输出整型数据;

printf(“%#o”,an);    //%#o表示以八进制输出整型数据,并输出八进制的前缀0;

5.9 浮点数输出:

float an = 93.42;

double bn = 6.564;

printf(“%f”,an);    //%f表示输出浮点数;

Printf(“%f”,bn);

5.10 %+数字+转换符

这种形式的转换符,数字表示最小字段宽度及小数位。

对于整型数据:

int an= 94;

printf(“%6d”,an);    //数字6表示,an的数值在屏幕上占用宽度最少为6个字符的宽度;如果容纳不下,则系统会自动加宽空间。

printf(”%6.5d“,an);    //数字6表示an的值在屏幕上最少占用的宽度,.5表示an的值最小位数;an的值只有两位,因此,系统会在an的值前面补0,使其占到5位;

对于浮点数:

float an = 3.1415926;

printf(“%10f”,an);    //数字10表示an值在屏幕上占用的最小宽度;

printf(“%10.2f”,an);    //.2表示打印小数点后2位(会执行四舍五入);

5.11 字符串

C语言没有字符串的概念,字符串实际就是一个字符数组,它也可以在printf()函数中一次性输出;

char stringValue[] = "this is raymond's blog.";

printf("%s\n",stringValue);    //%s将字符数组以字符串的形式输出;

更多推荐

占6个字符宽度C语言,C语言自学系列笔记 _ 基本数据类型