C语言基础(6)整型、字符型和浮点型 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
07-30 by peng | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.整型数据类型 C定义了5种整型数据类型。 整型数据类型表
例 输出各种整型类型的字节数 #include int main(void) { printf("sizeof(signed char) = %d/n", sizeof(signed char)); printf("sizeof(short int) = %d/n", sizeof(short int)); /* sizeof的结果都是int型 */ printf("sizeof(int) = %d/n", sizeof(int)); printf("sizeof(long int) = %d/n", sizeof(long int)); printf("sizeof(long long int) = %d/n", sizeof(long long int)); return 0; } 编译和运行结果 [root@localhost ccc]# gcc c15.c [root@localhost ccc]# ./a.out sizeof(signed char) = 1 sizeof(short int) = 2 sizeof(int) = 4 sizeof(long int) = 4 sizeof(long long int) = 8 程序说明:sizeof是字节操作符,使用方式,sizeof(数据类型)。sizeof的作用是得到数据类型所占的字节数。我们运行程序使用的环境是Redhat 5 Linux,编译器是GCC。 2.无符号整数类型 对应有符号类型,还有无符号整数类型。 无符号整数类型表
例 输出各种无符号整数类型的字节数 #include int main(void) { printf("sizeof(unsigned char) = %d/n", sizeof(unsigned char)); printf("sizeof(unsigned short int) = %d/n", sizeof(unsigned short int)); /* sizeof的结果都是int型 */ printf("sizeof(unsigned int) = %d/n", sizeof(unsigned int)); printf("sizeof(unsigned long int) = %d/n", sizeof(unsigned long int)); printf("sizeof(unsigned long long int) = %d/n", sizeof(unsigned long long int)); return 0; } 编译和运行结果 [root@localhost ccc]# gcc c16.c [root@localhost ccc]# ./a.out sizeof(unsigned char) = 1 sizeof(unsigned short int) = 2 sizeof(unsigned int) = 4 sizeof(unsigned long int) = 4 sizeof(unsigned long long int) = 8 3.整型常量 整型常量是指用以表示整型数值的常量,分为短整型(short int)、整型(int)、长整型(long int )和长长整型(long long int)四种。C默认整型(int)。 各种类型整型常量进制表示表(后缀不区分大小写)
4.字符数据类型 C语言中字符型数据只有一种,即char型数据。一般也把char直接称为字符型。字符型占用内存空间最少,一般占用一个字节,存储在char类型变量的整数可以表示为有符号或无符号的值,这取决于编译器。 例 字符型数据类型的字节长度 #include int main(void) { printf("sizeof(char) = %d/n", sizeof(char)); printf("sizeof(signed char) = %d/n", sizeof(signed char)); printf("sizeof(unsigned char) = %d/n", sizeof(unsigned char)); return 0; } 编译和运行结果 [root@localhost ccc]# gcc c17.c [root@localhost ccc]# ./a.out sizeof(char) = 1 sizeof(signed char) = 1 sizeof(unsigned char) = 1 5.字符变量 字符变量是用于存储字符型数值的变量。字符型变量也分为两种:有符号和无符号型。 语法结构: [signed] char ch1; [unsigned] char ch2; 例 #include int main(void) { char ch1 = '/n'; unsigned char ch2 = '/t'; char ch3 = 48; printf("ch1 = [%c], [%d]/n", ch1, ch1); printf("ch2 = [%c], [%d]/n", ch2, ch2); printf("ch3 = [%c], [%d]/n", ch3, ch3); return 0; } 编译和运行结果 [root@localhost ccc]# gcc c18.c [root@localhost ccc]# ./a.out ch1 = [ ], [10] ch2 = [ ], [9] ch3 = [0], [48] 程序说明:转义符'/n'是换行符,第一个printf函数中%c处会替换为'/n',输出到终端上则会替换为换行,我们可以看到输出的第一个方括号中间 发生换行。%d是c1的ASCII码值代替。转义符'/t'是水平制表符,第二个printf里的%c会替代为'/t',输出到终端上。数值48对应的 ASCII码是0,所以对应输出到终端上是一个0。 6.浮点型数据类型 C语言定义了三种浮点数据类型: •float,单精度 •double,双精度 •long double,长双精度 C标准中对不同类型的浮点数有不同的规定,编译器不同或硬件条件不同,字节长度也不相同。 例 测试三种浮点型字节长度 #include int main(void) { printf("sizeof(float) = %d/n", sizeof(float)); printf("sizeof(double) = %d/n", sizeof(double)); printf("sizeof(long double) = %d/n", sizeof(long double)); return 0; } 编译和运行结果 [root@localhost ccc]# gcc c19.c [root@localhost ccc]# ./a.out sizeof(float) = 4 sizeof(double) = 8 sizeof(long double) = 12 浮点型的字节长度、精度、数量级范围和输出输入格式表
7.浮点型精度 浮点型精度从低到高排列为float、double和long long double。 例 检查浮点型精度 #include int main(void) { float f = 0.9876543210123456789012f; /* 可以不使用f后缀,但可能会出现warning */ double d = 0.9876543210123456789012; long double ld = 0.9876543210123456789012l; /* 必须使用后缀l或L */ printf("f/t= %.25f/n", f); printf("d/t= %.25lf/n", d); printf("ld/t= %.25llf/n", ld); return 0; } 编译和运行结果 [root@localhost ccc]# gcc c20.c [root@localhost ccc]# ./a.out f = 0.9876543283462524414062500 d = 0.9876543210123456262294894 ld = 0.9876543210123456789217150 8.浮点型的存储方式 浮点型数值以科学计数法的表示形式存储在内存中。浮点型的内存形式包含三个部分: 1)符号位 符号位浮点型的符号位只有一位,为最高位。该位为1,表示负数,该位为0,为非负数。 2)指数位 浮点型的指数位以补码形式存储,是科学计数法的指数部分。 3)基数位 基数位是浮点型的最后一位,这个位决定数值的精度。 浮点型储存分段表
例 检测float、double和long double的存储状态 #include int main(void) { float fone = 2.0; float ftwo = 2.5; double done = 2.0; double dtwo = 2.5; long double ldone = 2.0; long double ldtwo = 2.5; /* 输出float型数据在内存中的存储内容 */ printf("float (2.0) = %08x/n", *(int *)(&fone)); printf("float (2.5) = %08x/n", *(int *)(&ftwo)); /* 输出double型数据在内存中的存储内容 */ printf("double(2.0) = %016llx/n", *(long long *)(&done)); printf("double(2.5) = %016llx/n", *(long long *)(&dtwo)); /* 输出long double型数据在内存中的存储内容 */ printf("londou(2.0) = %08x %08x %08x/n", *(((int *)(&ldone)) + 2 ), *(((int *)(&ldone)) + 1 ), *(((int *)(&ldone)) )); printf("londou(2.5) = %08x %08x %08x/n", *(((int *)(&ldtwo)) + 2 ), *(((int *)(&ldtwo)) + 1 ), *(((int *)(&ldtwo)) )); return 0; } 编译和运行结果 [root@localhost ccc]# gcc c21.c [root@localhost ccc]# ./a.out float (2.0) = 40000000 float (2.5) = 40200000 double(2.0) = 4000000000000000 double(2.5) = 4004000000000000 londou(2.0) = 00004000 80000000 00000000 londou(2.5) = 00004000 a0000000 00000000 |
c语言数据类型
最新推荐文章于 2024-04-20 15:23:29 发布