变量:一块固定大小的内存空间,可以存放可修改的数据(规定了数据的读取方式,以及数据的长度)
%ds输出,s会当成字符输出 %d针对的是十进制有符号整型(int) %u无符号 都是针对补码来输出的
%hd 十进制short %ld十进制long
%l 十进制float %lf 十进制double 默认小数点后面输出六位
%p十六进制输出地址
使用%d来输出long或%hd来输出int都有可能出错(数据截断)
原码反码补码:
正数:原码=反码=补码
负数:补码 = 反码+1 反码 = 原码除符号位取反
使用 二进制-0B 八进制-0 十六进制-0X,printf可以以八进制 十进制 十六进制输出不能以二进制输出
注:八进制 %o 十六进制%x 且都是无符号 要输出格式%#o %#x
unsigned int n = 0x80000000 以%d输出结果为-2147483648即-2^31
分析n 800000000 对应补码[1000 0000 …… 0000 0000]对应-2147483648
char类型-0表示-128一样的道理。
如果以不对应的格式输出,计算机会默认其满足输出格式来输出(而不是看其原本的类型)。
char 类型不能包含 ASCII 编码之外的字符
char *s = "中";//合法
char s = "中";//非法
转义字符
转义字符以\或者\x开头,以\开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值。对于转义字符来说,只能使用八进制或者十六进制。\t占位符等于四个空格
取模
如果 % 左边是正数,那么余数也是正数;
如果 % 左边是负数,那么余数也是负数
全局变量,它的默认初始值始终是 0,局部变量,C语言并没有规定它的默认初始值是什么
类型转换:
所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。
char 和 short 参与运算时,必须先转换成 int 类型。
有unsigned与int运算时int转为unsigned
无论是自动类型转换还是强制类型转换,都只是为了本次运算而进行的临时性转换,转换的结果也会保存到临时的内存空间,不会改变数据本来的类型或者值。