c语言变量类型(详细)
1 数据类型关键字
A.基本数据类型(5个)
void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
char :字符型类型数据,属于整型数据的一种
int :整型数据,通常为编译器指定的机器字长
在VC中,最长FFFFFFFF八位16进制,
-2147483648 到+2147483647
float :单精度浮点型数据,属于浮点数据的一种
double :双精度浮点型数据,属于浮点数据的一种
float 与double
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位)8bits(指数位)23bits(尾数位)double:
1bit(符号位)11bits(指数位)52bits(尾数位)于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
B .类型修饰关键字(4个)
short :修饰int,短整型数据,可省略被修饰的int。
-32768到+32767 四位16进制
long :修饰int,长整形数据,可省略被修饰的int。
FFFFFFFF八位16进制,
-2147483648 到+2147483647
signed :修饰整型数据,有符号数据类型
unsigned :修饰整型数据,无符号数据类型
#include int main(int argc, char *argv[]){ unsigned short a = -1; short b = a; printf("%d %d",a,b); return 0;}//结果:65535 -1
这是段很简单的代码? ?在计算机中,负数是以补码来存储的。 C语言中常量整数 -1的补码表示为0xFFFFFFFF。截取后面16位FFFF赋值给 变量a(unsigned short)。此时 a = 0xFFFF(a没有符号位,0xFFFF转换为十进制为65535)。
? ? ? a又将0xFFFF,直接赋值给short b。 此时 b = 0xFFFF(但是要注意,b是有符号的,0xFFFF转换为十进制为-1)。
执行printf("%d %d",a,b);的时候,要将 a和b的值先转换为int型:
?a没有符号所以转为int型为0x0000FFFF,
?b有符号转换为int型为0xFFFFFFFF。