1.打印:
unsigned int 用%u,unsigned long 用%lu
单独的unsigned相当于unsigned int
long 用%ld //根据计算机系统的不同可能不同,在int与long位数相同的系统中long可以用int,但这样的程序不具有可移植性(若在不同位数的系统)
%lo,%lx分别表示以八进制,十六进制打印long(即以l为前缀)
c语言的转化说明中只能用小写
short用h前缀,即为%hd,%ho,%hx
long long用%llu,%lld分别表示无符号和有符号
2.对内存的更好理解:
一.int类型被认为是计算机处理整数类型时最高效的类型
二.在函数传递参数时,编译器会把其他整形转化为int
三.用%hd等前缀可以避免这种转化
四.对于较大的数因此出现截断的现象
如: short end=65537;
printf("%d and not %hd",end,end);
输出得到200 and not 1
原因:
%d中转化为32位储存:00000000000000010000000000000001
而%hd只会读取后面的16位(int为32位,short为16位的系统中)
3.char类型
一.char用于储存字符(如字母和标点符号)
二.从技术层面,char类型是整数类型,储存方式为整数(ASCII)
三.正因为ASCII的范围为0~127,需要7位的二进制,因此char被定义为8位
四.可以用ASCII中的数字代替,例:char a='A',char b=65;一样
五.
char grace='B';
B对应的ASCII值66本会储存在32位的储存单元中,而现在储存在8位储存单元中(所以会有%d和%c的两种打印结果)
依据此特性:
int main()
{
char a = 'FSTE';
printf("%c", a);
return 0;
}
输出得到E,解释:定义的字符常量'FSTE',即把4个独立的ASCII码储存在32位储存单元中,而赋值给char类型的a,只能接收后8位,即E
//个人疑问:另外,若char a='FSTEA'会报错"字符串过长",因此char类型的储存会被编译器存为32位
4.活跃位置即光标位置
5.浮点型
一.用%f来打印十进制的浮点数,用%e打印指数类型的浮点数
二.c编译器会把float类型自动转化为double类型