Linux C语言 08-运算符
本节关键字:Linux、C语言、运算符优先级
相关C库函数:sizeof、printf
按照功能区分,运算符优先级以及使用示例:
类型 | 运算符 | 说明 |
---|---|---|
赋值运算符 | = | |
算术运算符 | ±*/% | |
关系运算符 | > < >= <= != == | |
逻辑运算符 | && || ! | |
位运算符 | & | ^ ~ << >> | |
复合运算符 | += -= *= /= %= &= |= ^= | |
自增自减 | ++ – | |
逗号运算符 | , | |
问号运算符 | ? | |
sizeof运算符 | sizeof |
赋值运算符 =
1) 将等号右侧的内容赋值给等号左侧
2) 等号左侧必须是变量
算数运算符
1) +-*/
*/ 运算时有不同精度等级的数据,结果以最高精度形式输出
例:5 * 1.2 = 6.0
2) %
* 两侧操作数必须为整型数据
关系运算符
1) > < >= <= != ==
表达形式:表达式
运算结果: 真(1)或者假(0)
逻辑运算符
1) && (逻辑与)
表达形式:表达式1 && 表达式2
运算规则:
* 见0(假)出0,双1(真)为1
* 若表达式1为假,表达式2不参与运算
运算结果:0或者1
2) || (逻辑或)
表达形式:表达式1 && 表达式2
运算规则:
* 见1(真)出1,双0(假)为0
* 若表达式1为真,表达式2参与运算
运算结果:0或者1
3) ! (逻辑取反)
表达形式:!表达式
运算规则:真变假,假变真
运算结果:0或者1
位运算符
1) & 按位与
运算条件:运算前所有的数据要全部转换成二进制,
在对应位之间进行 逻辑与 运算
表达形式:表达式1 & 表达式2
运算规则:见0出0,双1为1
运算结果:0或者1
2) | 按位或
运算条件:运算前所有的数据要全部转换成二进制,
在对应位之间进行 逻辑或 运算
表达形式:表达式1 & 表达式2
运算规则:见1为1,双0为0
运算结果:0或者1
3) ^ 异或
运算条件:运算前所有的数据要全部转换成二进制
在对应位之间进行 异或 运算
表达形式:表达式1 & 表达式2
运算规则:相同为0,不同为1
运算结果:0或者1
4) ~ 按位取反
运算条件:运算前所有的数据要全部转换成二进制,
在对应位进行 按位取反 运算
表达形式:~表达式
运算规则:1变0,0变1
运算结果:0或者1
5) << 左移
表达形式:表达式 << n
运算规则:数据整体左移,高位数据丢失,低位补0,
在有效数据不丢失的情况下,左移n位,数据扩大2的n次方
运算结果:略
6) >> 右移
表达形式:表达式 >> n
运算规则:数据整体右移,低位数据丢失,高位补0,
在有效数据不丢失的情况下,右移n位,缩小2的n次方
运算结果:略
& | ^
1 1 1 1 0
1 0 0 1 1
0 1 0 1 1
0 0 0 0 0
表达式 & 0 清零操作
表达式 | 1 置一操作
表达式 ^ 1 取反操作
表达式 ^ 0 保持原样
二进制数:(y表示移动位数)
指定某一位数置0:x &=~ (1<<y)
指定某一位数置1:x |= (1<<y)
指定某一位数取反:x ^= (1<<y)
获取某一位的值:x &= (1<<y)
复合运算符
1) += -= *= /= %=
2) &=
3) |=
4) ^=
自增自减
1) ++ --
int a=0, b=0;
printf("a++=%d, ++b=%d\n", a++, ++b); // 运行结果 a++=0, ++b=1
逗号运算符
1) 分隔 ,
2) 逗号和小括号结合使用(a,b,c,d)
直接取小括号中最后一个表达式的值
例:
int num = (3,4,5);
int a = (num += 3,6 + 9);
int b = num += 3,6 + 9;
int c = (num += (3,6 + 9));
运行结果:
a = 15
b = 8
c = 20
问号运算符
表达形式:表达式1 : 表达式2 ? 表达式3
运算规则:
* 表达式1为真 结果为表达式2
* 表达式2为假 结果为表达式3
运算结果:
sizeof运算符
含义:求任意对象的大小(包括'\0')
大小:所占空间,单位是字节