C语言基本数据类型

时间:2021-08-05 15:05:48

一,整型
  char    short    int  long      、long long(C99新加入),再与unsigned搭配,共有10种类型



c,八进制和十六进制的整数常量(无负数)

234u,234,
在C语言中默认的数字为十进制。如果在一个数字前面加上前缀0(零),就可以表示为八进制了

01
如果在一个数字前面加上前缀0x或者0X,就可以表示为十六进制

0xff
(注意:不论是十进制还是八进制还是十六进制表示法,最终被转换成的机器语言的值都是一样的)

e,整数溢出(省略)

占用字节大小的排列顺序为 short <= int <= long,C标准保证short至少为16位,int不少于short,long至少为32位,  并且不少于int,   Long long 至少不少于64位.
大多数情况下,采用最小标准,long long类型为64位,long类型为32为,short 为16位,int类型则较多,为16位或32位
b,常量
不论是十进制、八进制还是十六进制的常量,根据数字大小,以int、long、unsigned long、long long、unsigned long long的顺序依次适应存储
可以加后缀。后缀L或l、LL、u或U、ul等

3,字符char类型(属于整型)
a,一个char类型变量所占用的字节与平台相适应,C保证char类型所占内存足够大,以存储其所在系统上的基本字符集
(注:C语言中的一个字节定义为一个char变量所占用的位数)
b,大多数情况下占用8个字节,取值范围为-127到128。可以在前面加上unsigned使其取值范围为0-255以便表示扩展的ASCII码
字符常量  ’A'
d,4种赋值方法:char x = 'A'; //直接用字符赋值
char x = 65; //用ASCII码赋值
char x = '\007'; //八进制形式。格式为\0oo 可以省略前面的零
char x = '\x7'; //十六进制形式。格式为\xhhh或\Xhhh
(注意:65本来应该是一个常量,而这个常量应该被存为int类型,因此当被赋值的时候,只读取最后一个字节的内容
八进制和十六进制形式的转义字符形式还可以用于字符串中)
e,转义字符序列

\a----------报警 \b----------退格 \f----------走纸 \n----------换行
\r----------回车 \t----------水平制表符\v----------垂直制表符
\\------反斜杠(\) \‘---------单引号(') \"----------双引号("")
\?----------问号(?) \0ooo-------八进制值(o表示一个八进制数字)
\xhhh----------十六进制值(h表示一个十六进制数字)
二,浮点型
1,float、double和long double(C99新加入)
a,float类型:
有效数字至少6位
取值范围至少为10的-37次方到10的37次方
存储方式:以二进制的指数形式用32位存储一个浮点数,其中8位用于表示指数及其符号,24位用于表示尾数
b,double类型:
有效数字至少10位
取值范围同float,至少为10的-37次方到10的37次方
存储方式:以二进制的指数形式用64位存储一个双精度数,指数和尾数的位数随系统不同而不同
2,声明方法同上
3,浮点常量
浮点常量是指一个常量数字中至少存在一个小数点或者指数部分(区别于int常量)
默认情况下编译器将浮点常量视为double类型,占8个字节,以便使常量之间的计算更加精确。
如果要更改为float类型,可以在后面加上f或F,如果要更改为long double类型,可以在后面加上l或L
还可以用十六进制来表示浮点常量,那么就需要在前面加上0x或0X接着就是十六进制数字,但是指数P或p,表示是2的指数
比如:0xa.1fp10-------1010.00011111 * 2^10 = 101000011111 换成10进制就是10364

(注意:打印double类型的时候,默认只有6位有效数字,要打印更多的有效位可以在f前面加上.7 .8等)
5,浮点值的上溢和下溢
上溢:当计算结果是一个达到不能在计算机里面表达的时候,就会发生上溢。发生上溢之后,计算得到的值为INF,表示无穷大
下溢:当一个数字的尾数和指数已经是最小了,在进行运算以时这个数字更小的时候,就会发生下溢。发生下溢的时候,会损失有效数字的精度
6,浮点数的舍入误差
当一个数字的精度太大的时候,将这个数字进行加减运算,由于计算机能够表示出的有效位数有限,因此不能正确计算出结果
比如:2e20 + 1 - 2e20 在第21位加上1,计算机是做不到的 如果是2e4 + 1 - 2e4 结果是1