A. C语言中说的浮点型是什么意思呢
C语言中说的浮点型就是带小数点的数,也就是小数。(只是在计算机领域中“浮点型”是小数的专业替代名词)
(1)不同的编译器整形到浮点相同吗扩展阅读:
在计算机系统的发展过程中,曾经提出过多种方法表示实数,但是到目前为止使用最广泛的是浮点表示法。相对于定点数而言,浮点数(浮点型)利用指数使小数点的位置可以根据需要而上下浮动,从而可以灵活地表达更大范围的实数。
B. C语言中整型,字符型,浮点型,和双精度浮点型,详解
整型,计算机中的一个基本的专业术语,指没有小数部分的数据。整型可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。包括整型常量和整型变量,整型变量又包括短整型、基本整型、长整型,它们都分为有符号和无符号两种版本,是一种智能的计算方式。
字符型量包括字符常量和字符变量。字符串常量由一对双引号括起的字符序列。字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。
浮点型利用指数使小数点的位置可以根据需要而上下浮动,从而可以灵活地表达更大范围的实数。
双精度浮点型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是double float数据类型,C/C++中表示实型变量的一种变量类型。
(2)不同的编译器整形到浮点相同吗扩展阅读
双精度浮点型类型数值可转换到其他类型的整数或浮点数,反之亦然。双精度浮点型常量的最后一个字符可加上“d”或“D”。其存储格式与浮点型类似,最高位为符号位,次高11位为指数位,其次52位为尾数。
双精度型就是双精度浮点型,同数值型比,它能提供更高的数值精度,采用固定存储长度的浮点数形式,每个双精度浮点型数据占8个字节。与数值型数据不同,它的小数点位置是由输入的数据值来决定的,并且只能用于表中的字段。
C. 整型、浮点型和字符型有什么不同点
1.整型数据类型
C定义了5种整型数据类型。
整型数据类型表
序号 类型名称 说明 字节数 取值范围
1 signed char 有符号的单字节整数类型 1 -128~+127
2 short int 短整型 2 -32768~+32767
3 int 整型 4 -2147438648~+2147438647
4 long int 长整型 4 -2147438648~+2147438647
5 long long int 长长整型 8 -9223372036854775808~+-9223372036854775807
例 输出各种整型类型的字节数
#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.无符号整数类型
对应有符号类型,还有无符号整数类型。
无符号整数类型表
序号 类型名称 字节数 取值范围
1 unsigned char 1 0~255
2 unsign short int 2 0~65535
3 unsigned int 4 0~4294967295
4 unsigned long int 4 0~4294967295
5 unsign long long int 8 0~18446744073709551615
例 输出各种无符号整数类型的字节数
#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)。 各种类型整型常量进制表示表(后缀不区分大小写)
序号 数据类型 八进制 十进制 十六进制
1 整型 0112 74 0x4a
2 长整型(l) 0112l 74l 0x4al
3 长长整型(ll) 0112ll 74ll 0x4all
4 无符号整型(u) 0112u 74u 0x4au
5 无符号长整型(ul) 0112ul 74ul 0x4aul
6 无符号长长整型(ull) 0112ull 74ull 0x4aull
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
浮点型的字节长度、精度、数量级范围和输出输入格式表
序号 数据类型 字节长度 精度 数量级范围 printf和scanf格式
1 float(f) 4 7 -38~38 %f
2 double 8 约16 -308~308 %f
3 long double(1) 12 约19 -4932~4932 %llf
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)基数位
基数位是浮点型的最后一位,这个位决定数值的精度。
浮点型储存分段表
序号 数据类型 符号位 指数位 基数位 偏差值
1 float 1 8 23 127
2 double 1 11 52 1023
3 long double 1 15 64 16383
例 检测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
D. 关于浮点型的数据,在不同计算机语言中的取值范围是不是不一样
Java和C的浮点数都遵循IEEE 754标准,唯一的不同是Java允许非规格化数,即在阶码为全0时允许尾数不以1开头,如此一来Java可以表示的最小数是2^(-(126+23))=2^-149=1.4e-45,而C语言不允许非规格化数,因此最小可以表示的数是2^(-126)=1.18e-38。
E. 浮点数运算,因编译器精度不同导致的误差如何避免
将小数部分放大10倍
F. 不同编译器会不会产生不同的结果
会有不同的结果。因为编译器不同自带的库函数也不一样。