Part 1.数据类型、运算符、表达式
1.数据类型
1)整数类型:int(2字节),short(2字节)--->短整型,long short(2字节),unsigned(2字节),unsigned short(2字节)---->无符号整型,unsigned long(4字节)-->无符号长整型
2)实型类型:单精度-float(4字节),双精度-double(8字节),长双精度-long double(10字节)
1byte=8bit
3)字符类型:Char(1字节)
对于计算机内部整数以二进制补码表示。
正数的补码还是原码,负数的补码----->按位取反再加1
指数形式的常量表示:12.1345*10=12.1345e1(e前必须是数字,e后必须是整型)
2.运算符
- 算术运算符:%--模(两个运算数必须是整数。例:int(12.3%4) 是错的)
- 自增自减运算符:结合方式”自右向左”,不能用于常量表达式
N=m++ 先操作后赋值
N=++m 先赋值后操作
例 1:int i=2,k;
k=(i++)+(++i)+(i++); ====>所有的前缀++先执行,在执行赋值语句。
printf(“%d,%d”,i,k); //i=5 k=9 ++i;k=i+i+i;i++;i++;
例 2:int i=2,k;
k=(++i)+(++i)+(++i);<====>++i;++i;++i;k=i+i+i;
Printf(“%d,%d”,i,k);//i=5 k=15
- 复合赋值运算符(+=,-=,*=,/=)
- 关系运算符(<,>,<=,>=,!=,==)
- 逻辑运算符(||,&&,!)
int a,b,c;
a=b=1
c=a++-1;
printf("%d,%d\n",a,c);// 2 0
c+=-a+++(++b||++a);===>-(a++)+(++b||++a);
printf("%d,%d",a,c);//3 -1
逻辑运算注意它的中断性,还有整体返回的值
- 逗号运算符(对于表达式(e1,e2),返回e2的值)
- 三目运算符(表达式?a:b ---真为a,假为b)
注意:
%m.nf---->m为输出的总列数,n为小数位数
例:float a=32.14;//32.15会产生四舍五入
Printf(“%8.1f”,a);----会左补4个空格_ _ _ _32.1
Printf(“%-8.1f”,a);---会右补4个空格32.1_ _ _ _
当m<=整体列数时,这时m无效,只取一位小数位
%s:按实际长度输出
%m.ns:n表示从字符串左端截取n个字符输出共占m列
Scanf中的格式控制不仅可以有说明符,还可以包含其他字符;
例:int a,b;
scanf(“%2d%*3d%1d”,);//%*3d--->跳跃多少列。123456
Printf(“%d,%d”,a,b);//a=12 b=6
Scanf输入数据可以指定列数,但不可以规定精度。
如:scanf(“%2d%4d”,&x,&y);//123456---->x=12 y=3456
Scanf(“%10.2f”,&f);//这是不合法的
字符串输入与输出:
输入格式”%c”表示输入任意一个字符,包括回车、空格和tap键等。输入时字母之间也不能输入空格。若将两个数加以区分,必须输入空格
- Char x,y;int b;
Scanf(“%c%c”,&x,&y);//AX--->enter===>x=A,y=X;
Scanf(“%c%d%c”,&x,&b,&y);//A_3V--->enter===>x=A,b=3,y=V
_A3V--->enter===>不能实现将其赋值
- 如果通过以下语句给a、b、c、d分别输入字符A、B、C、D,给w、x、y、z分别输入10、20、30、40,正确的输入形式是_____
Scanf(“%d%c%d%d%c%c%d%c”,&w,&a,&x,&y,&b,&c,&z,&d);
//10A20 30BC40D
在输入数据时,如果遇到以下情况则该数据认为结束。
- 遇空格,或按回车或Tab键
- 按指定的宽度结束,如”%3d”,只取3列
- 遇非法输入
类型强制转换:(类型名)表达式
如:(long)2的结果是2L (int)4.2的结果是4.
与、或、异或运算
- a&b. eg: 0&0=0 ; 0&1=0 ; 1&0=0 ; 1&1=1;
- a|b eg:0|0=0 ; 0|1=1 ; 1|0=1 ; 1|1=1;
- a^b eg:0^0=0 ; 0^1=1 ; 1^0=1 ; 1^1=1;