预备知识
A、1 字节(byte)=8 比特(bit)
1个比特即为1个二进制位数
B、%d 按有符号十进制整型数打印
%6d 按十进制整型数打印,至少6个字符宽(指输出的最后一个字符距行首为六字符)如:xxx123
%f 按浮点数打印(默认为小数点后6位)
%6f按浮点数打印,至少6个字符宽
%06f 按浮点数打印,至少6个字符宽,在最前面用0补齐
如:000123
%.2f 按浮点数打印,小数点后有两位小数
%6.2f 按浮点数打印,小数点后有两位小数,至少6个字符宽
%u 按无符号10进制整型数打印
%o 按无符号8进制整型数打印
%x/%X 按无符号16进制整型数打印
(前后加数字原理相同)
C、对于整型储存的数据,printf打印时需用%d
对于浮点型储存的数据,printf打印时需用%f
整型数
存储方法:
无符号整数,在左边用0补齐;带符号整数,最左一位表符号,然后用0补齐剩余位
char
ASCII码字符或者-128~127的整数 1字节
使用例:
char c=’A’ char c=’e’ char c=123
错误示范:
char c=’我’ char a=’123’ char c=129
注意:
1、单引号表示字符常量,一个汉字占两个字符,123为三个字符,若想存储整数,直接打即可
2、若数字超出范围,则会根据数字顺序输出下一个,如128正常输出,129 --> -127
3、若存储字符,打印(printf)时需用%c为格式符;若储存整数,打印时需用%d为格式符
int
ASCII码字符或是-2,147,483,648 到2,147,483,64的整数 4字节
使用基本与char相同
Short/long/long long/unsigned (int)
short的取值范围是-32768~32767
long的取值范围是-2147483648~2147483647
不同环境下,取值范围和占用的长度是不一样的,有如下规则:
short跟int至少为16位(2字节)
long至少为32位(4字节)
short的长度不能大于int,int的长度不能大于long
char一定为为8位(1字节),char是编程能用的最小数据类型
Mac 64bit是LP64,Windows 64bit是LLP64
浮点数:
1、类型
float(4字节):
1bit(符号位S) 8bits(指数位E) 23bits(尾数位M)
double(8字节):
1bit(符号位S) 11bits(指数位E) 52bits(尾数位M)
2、储存原理
a、先看符号(S:0正1负)
b、将数字转为二进制
c、规范化
(在二进制内用科学计数法,如(100.111)2 =(1.00111)2*(2^2))
d、找到E、M的值
(E=2的指数+127再转为二进制,M=规范化后的小数点后的数字,如上文中,E=2+127=129=(10000001)2,M=00111)
e、连接SEM,M后多出的位数用0补齐
3、精度
float为6-7位有效数字,double为15-16位有效数字
理解(以float为例):无论是哪个数字,最终写成规范化二进制后,可储存的小数点后位数仅有23位,剩余的位数将被舍弃,说明对应的M有且仅有223=8388608种组合,即位于106到10^7之间,即只能储存到大约前7位有效数字
如20.71428
打印结果为20.714279174804688