1.3运算符
1.3.1运算符
用算术运算符将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式 运算对象包括常量、变量、函数等.
1.3.2运算符的分类
1、双目运算符:即参加运算的操作数有两个
例: a+b
2、单目运算符:参加运算的操作数只有一个
++自增运算符 给变量值+1
--自减运算符 给变量值-1
int a=10;
a++;
3、三目运算符:即参加运算的操作数有 3 个
()?():()
1.3.3算数运算符
/ % += -= *= /= %=
10%3 表达式的结果为 1
复合运算符:
a += 3 相当于 a=a+3
a=6+8 相当于 a=a(6+8)
1.3.4 关系运算符
(>、<、= =、>=、<=、!= )
!=为不等于 一般用于判断条件是否满足或者循环语句
1.3.5 逻辑运算符
1、&&
逻辑与 两个条件都为真,则结果为真
if((a>b) && (a<b)
if(b<a<c) 这种表达方式是错误的
2、|| 逻辑或
两个条件至少有一个为真,则结果为真
if((a>b) || (a<c)
3、! 逻辑非
if(!(a>b)) {
}
1.3.5 位运算符
十进制转二进制:
方法 除 2 求余法
例: 123 十进制 转二进制
正数在内存中以原码形式存放,负数在内存中以补码形式存放 .
正数的原码=反码=补码
原码:将一个整数,转换成二进制,就是其原码。
如单字节的 5 的原码为:0000 0101;-5 的原码为 1000 0101。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。
如单字节的 5 的反码为:0000 0101;-5 的反码为 1111 1010。
补码:正数的补码就是其原码;负数的反码+1 就是补码。
如单字节的 5 的补码为:0000 0101;-5 的补码为 1111 1011。
在计算机中,正数是直接用原码表示的,如单字节 5,在计算机中就表示为:0000 0101。 负数用补码表示,如单字节-5,在计算机中表示为 1111 1011。
无论是正数还是负数,编译系统都是按照内存中存储的内容进行位运算
1、&按位 与
任何值与 0 得 0,与 1 保持不变
使某位清 0
0101 1011&
1011 0100=
0001 000
2、| 按位 或
任何值或 1 得 1,或 0 保持不变
0101 0011 |
1011 0100 =
1111 0111
3、~ 按位取反
1 变 0,0 变 1
0101 1101~1010 0010
4、^ 按位异或
相异得 1,相同得 0
1001 1100 ^
0101 1010 =
1100 0110
5、位移
>>右移
<< 左移
注意右移分:逻辑右移、算数右移
(1)、右移
逻辑右移 高位补 0,低位溢出
算数右移 高位补符号位,低位溢出 (有符号数)
A)、逻辑右移
低位溢出、高位补 0 0101 1010 >>3
0000 1011
B)、算数右移:
对有符号数来说 低位溢出、高位补符号位。
1010 1101 >> 3
1111 010 1
总结 右移:
1、逻辑右移 高位补 0,低位溢出 注:无论是有符号数还是无符号数都是高位补 0,低位溢出 .
2、算数右移 高位补符号位,低位溢出 (有符号数) 注:对无符号数来说,高位补 0,低位溢出 对有符号数来说,高位补符号位,低位溢出.
(2) 左移<< 高位溢出,低位补 0
5<<1
0000 0101
0000 1010
1.3.6 条件运算符号
()?():()
A?B:C;
如果?前边的表达式成立,整个表达式的值,是?和:之间的表达式的结果 否则是:之后的表达式的结果
例 14: #include<stdio.h> int main(int argc, char *argv[]) { int a; a=(3<5)?(8):(9); printf("a=%d\n",a); return 0; }
1.3.7 逗号运算符
(),()
例 15: #include<stdio.h> int main(int argc, char *argv[]) { int num; num=(5,6); printf("%d\n",num); return 0; } 注意逗号运算符的结果是,后边表达式的结果
1.3.8 自增自减运算符
i++ i--
运算符在变量的后面,在当前表达式中先用 i 的值,下条语句的时候 i 的值改变
例 16: #include<stdio.h> int main() { int i=3; int num; num=i++; printf("num=%d,i=%d\n",num,i); //num=3 ,i=4 return 0; }
++i 先加 ,后用
例 17: #include<stdio.h> int main() { int i=3; int num; num=++i; printf("num=%d,i=%d\n",num,i); //num=4,i=4 return 0; }