1.24
- double型 内存存储
3
2.Left value right value 左值 右值;只能放在赋值运算符左边的叫做左值,只能放在右边的叫右值 ;常量都是右值 。
没有名字的变量称为匿名变量或临时变量;所有的匿名变量都是右值;
left value locatable可取地址的 ;能取地址的值就是左值,不能取地址的就是右值。
rightvalue readable只读
Const恒定的 定义 const int i = 10 后续i的值不会再变化,变为只读变量。
3.++自加运算符: 后加加i++ 先用再加,前加加++i 先加后用;i=2,i++表达式是匿名空间,它会复制出一个空间出来为2,故打印出为2,原来i的空间变为3;前加加效率更高,因为不用开辟新空间。
4.混合运算
隐式转换级别表
=33.600000。注意这里3 / 5.0 =0.6
输出>0, 因为unsigned级别高,int i会隐式转换为unsigned型,-6变为6,和为9,故大于0.
5.显示转换:
,暂时转换为需要的类型,会开辟一个临时空间,并不会影响操作数的本身。
=0.600000
忽略9的作用,不做四舍五入。输出1.234567
6.不同类型的混合赋值:
将浮点型赋值给整型,小数截断
输出12
将整型赋值给浮点型,
输出12345.000000
将int型往short型赋值,高位截断,只保留低字节数据,
输出5678的十进制为22136
将short型往int型赋值, 高位补0(实际上补的是符号位)
输出00001234的十进制为4660.
若s=0x8234,则s的最高位是1,表示负数,往i空间填入时,高位补F,符号位扩展,
输出-32204. 不出错的原因是运算时 short必转为int。
若定义unsigned short i = 0x8234,
,输出33332,
,因为没有符号位了,直接补0.
将int赋值unsigned int ,
输出FFFFFFFF,
输出-1,
输出2的31次方-1. 注意有无符号,计算机将不同解读,有符号就补码解读,无符号就会看做一个很大的数。
第四章 顺序程序设计
数据的输入输出
输入输出的基准点为内存。
putchar(int)函数,最基本的函数,输出一个字符
getchar输入一个字符
,将getchar的返回值(是int型 字节4)赋值给c(char型 字节1),会造成高位截断。
puthcar键盘输入时 会进入缓冲区(队列 先进先出),防止cpu资源浪费。getchar再往缓冲区取一个字符出来。
- printf函数 返回值+函数名+形参
“ ”就是const char * 叫做字符串常量。
%d是占位符,由函数的下一个参数决定。
输出Hello,World! 1234 。
输出 10 + 20 = 30.
占位符应于输入参数个数保持一致。
各类占位符:
%d与%i:都是有符号的十进制
%
八进制,无符号的十进制,小写、大写十六进制
%e E:输出指数形式。double型,float型也对因为必转
%m.n:来制定m是总宽度,n是保留几位小数。
。若是实际长度大于m则仍输出实际长度。
%f :小数点。
%数字d/f,就输出几位。 若数字大于实际长度 则在前面补空格 若%0数字d,则补0. 若数字为负数,则在后面补
输出1234 ABC。
%g G:自己选择,%g(%G) 表示浮点数不显无意义的零"0"
%a A:%a(%A) 表示浮点数、十六进制数字和p-(P-)记数法(C99)。
%c:打印字符
%s:const char * (字符串常量)就是个地址 。
%p: 地址
输出
%%:%
%#0/#x:意思是提醒输出的是八进制或十六进制
输出Helloret=5,后面ret输出的是前一个printf输出的字符个数。
scanf函数
&i这里必须取地址
原因:c语言中被调函数(这里是scanf)无法修改主调函数,只是修改复制品,只是值传递
指针传参:通过指针的间接访问,将地址传过去,实现被调修改主调。
Scanf中 “%d”中除了占位符 其他一概不写。
如果输入的数据有两个及以上,则在实际输入时中间可以用空格或者table或者回车来分隔。
double f1,f2;
scanf(“%lf%lf”,&f1,&f2); scanf函数中要分清float和double 是“%f”还是”%lf”,要匹配,不然程序会崩溃,原因是scanf是找地址。