1、运算符
1.1 算术运算符:+ - * / % ++ --
其中,前三种就是很平常的加减乘,"/" 表示的是取整,'%'表示的是取余 ,例如:
12/7 = 1,这里只取整数部分
12% 7 = 5,这里是等于余数部分
"++"是自增1运算符,其功能是使变量的值自增1;
"--"是自减1运算符,其功能是使变量值自减1。
自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式:
(1) ++i:i 自增1后 再参与其它运算。
(2) --i: i 自减1后 再参与其它运算。
(3) i++:i 参与运算后,i的值再自增1。
(4) i--: i 参与运算后,i的值再自减1。
如:
int x,y;
x=10; y=x++; //结果y=x=10, 然后 x=x+1=11
x=10; y=++x; //结果 x=x+1=11,然后 y=x=11
同理,
x=10; y=x--; //结果y=x=10, 然后 x=x-1=9
x=10; y=--x; //结果 x=x-1=9,然后 y=x=9
1.2 逻辑运算符:|| && !
"||"表示或,(条件1)||(条件2),只要满足其中一个条件即可,当然,这里需要注意的是:如果条件1已经满足了,那么计算机是不会去判断后面的条件2的;
"&&"表示与,(条件1)&&(条件2),需要两个条件同时满足。与上面相似的是,如果第一个条件不成立,计算机是不会执行第二个条件的。
1.3 位运算符:>> << & | ~
这里需要注意的是:遇到位运算符首先把数转换成二进制
例如:
a=16>>2,表示将16右移2位,转换为二进制:0001 0000 >> 0000 0100 = 4,即为将1往右移动两位,还有一种算法是16/(2^2)=4;
a=16<<2,表示将16左移2位,转换为二进制:0001 0000 << 0100 0000 = 64,即为将1往左移动两位,还有一种算法是16*(2^2)=64;
总之,左移就是乘以2的移动位数的平方,右移就是除以2的移动位数的平方。
而对于 & 和 | 则主要是用于将某位数快速置1或0,比如说:
将34的第5位置为1,首先将其转化为二进制,再通过 | 运算,有1的就合并;
34 = 2^5 + 2^1 = 0010 0010 | 0001 0000 = 0011 0010
将34的第2位置为0,首先将其转化为二进制,再通过 & 运算,只有都为1才为真;
34 = 2^5 + 2^1 = 0010 0010 & 1111 1101 = 0010 0000
1.4 赋值运算符: =
1.5 比较运算符: > < >= <= == !=
1.6 特殊运算符: sizeof()
计算对象所占的字节数
1.7 逗号运算符: 只取最后一个表达式的值
例如:
a=3,b=5,c=6
若a = ( a + b,a = a + b, c + b ),那么a应该等于11;
若a = ( a + b,b = a + b, c + b ),那么a应该等于14,因为此时的b等于8。
1.8 三目运算符:(表达式1)?(表达式2):(表达式3)
如果满足表达式1,那么就取表达式2,反之,则取表达式3
举个简单的例子:a=3,b=5,(a>b)? c=0:c=1,很明显,a>b是不成立的,所以应该取c=1。
2、数据类型
数据类型(所占字节数): int char float double short
32位操作系统 4 1 4 8 2
16位操作系统 2 1 4 4 1
其中,值得注意的是char的有无符号声明
如果是无符号的unsigned char取值范围:0000 0000 ~ 1111 1111 = 0 ~ 255
如果是有符号的char 取值范围是:-128~127,因为第一位是符号位,用0、1表示正负
举个例子:
signed int a = -16;
unsigned int b = 5;
if ( a + b > 0 ) {
printf ( " hello " );
} else {
printf ( " world " );
}
在这个例子中,最终的结果是输出hello,为什么呢?这是因为有符号的数和无符号的数相加会转换成无符号的数,所以a会转换成一个正数。同理的是,高精度和低精度相加,会转换成高精度。
3、常量
3.1 常量:在程序运行期间值不会发生改变的整型常量:0~9
3.2 字符常量: 'a' ~'z'
3.3 字符串常量(末尾默认有一个‘\0’):“hello”
3.4 浮点型(实型):3.14
3.5 指数型常量:(次方如果为负,转化之后需减;若为正,转换之后需加)
3.14*10^-5 = 3.14e-5
9.56*10^9 = 9.56e+5
3.6 标识符常量:宏定义
3.7 标识符:自定义的由字母、下划线、数字组成。首字母只能是字母或下划线。不能和关键字重名。
4、输入输出
scanf("%d",&a);//从键盘上获取值%d %c %s %f
printf("%d\n",a);
printf("%3d\n",a);
%c: 字符型
%s: 字符串
%p: 输出地址
%f: 浮点型
%lf: 双精度