算数操作符
加 | 减 | 乘 | 除 | 取余 |
---|---|---|---|---|
+ | - | * | / | % |
1.除了取余%操作符外,其他的操作符可以作用于整数和浮点数;
2.对于除/操作符,如果两个操作数都为整数,则执行整数除法;而操作数只要有浮点数执行的就是浮点数除法;
3.取余%操作符的两个操作数必须为整数,返回的是整除之后的余数。
#include<stdio.h>
void main()
{
int a = 3, b = 2;
double c = 1.5;
printf("a + b = %d\n", a + b); //5
printf("a - b = %d\n", a - b); //1
printf("a * b = %d\n", a * b); //6
printf("a / b = %d\n", a / b); //1
printf("a %% b = %d\n", a % b); //1
printf("a + c = %.2f\n", a + c); //4.50
printf("a - c = %.2f\n", a - c); //1.50
printf("a * c = %.2f\n", a * c); //4.50
printf("a / c = %.2f\n", a / c); //2.00
}
移位操作符
左移 | 右移 |
---|---|
<< | >> |
左移操作符移位规则:
左边抛弃,右边补0;
右移操作符移位规则:
右移运算分为两种:
1.逻辑移位,左边用0填充,右边丢弃;
2.算术移位,左边用原该值的符号位填充,右边丢弃。
如果操作数是无符号数即是逻辑移位,如果操作数是带符号数,是算术移位。
代码示例:
正整数a左移n位的值为(a*(2^n));
正整数a右移n位的值为(a/(2^n));
#include<stdio.h>
void main()
{
int a = 10;
//0000 0000 0000 0000 0000 0000 0000 1010
//0000 0000 0000 0000 0000 0000 0010 1000 -- 左移
//0000 0000 0000 0000 0000 0000 0000 0010 -- 右移
printf("%d\n", a << 2); //40
printf("%d\n", a >> 2); //2
//算数右移
int b = -10;
//补码1111 1111 1111 1111 1111 1111 1111 0110
//补码1111 1111 1111 1111 1111 1111 1101 1000 -- 左移
//原码1000 0000 0000 0000 0000 0000 0010 1000 -- 左移
//补码1111 1111 1111 1111 1111 1111 1111 1101 -- 右移
//原码1000 0000 0000 0000 0000 0000 0000 0011 -- 右移
printf("%d\n", b << 2); //-40
printf("%d\n", b >> 2); //-3
}
位操作符
按位与 | 按位或 | 按位异或 |
---|---|---|
& | | | ^ |
其操作数必须位整数
代码示例:
#include<stdio.h>
void main()
{
int num1 = 1;
int num2 = 2;
//1--0000 0000 0000 0000 0000 0000 0000 0001
//2--0000 0000 0000 0000 0000 0000 0000 0010
int x = num1 & num2; //0
int y = num1 | num2; //3
int z = num1 ^ num2; //3
printf("%d %d %d", x, y, z);
}
赋值操作符
符号 | 表达式 | 含义 |
---|---|---|
= | a = 10 | 将10赋给a |
+= | a += 10 | a = a+10 |
-= | a -= 10 | a = a-10 |
*= | a *= 10 | a = a*10 |
/= | a /= 10 | a = a/10 |
%= | a %= 10 | a = a%10 |
>>= | a >>= 10 | a = a>>10 |
<<= | a <<= 10 | a = a<<10 |
&= | a &= 10 | a = a&10 |
|= | a |= 10 | a = a|10 |
^= | a ^= 10 | a = a^10 |
单目操作符
符号 | 含义 | 符号 | 含义 | ||
---|---|---|---|---|---|
! | 逻辑取反 | ~ | 按位取反 | ||
- | 负值 | - - | 自减 | ||
+ | 正值 | ++ | 自增 | ||
& | 取地址 | * | 间接访问操作符(解引用操作符) | ||
(类型) | 强制类型转换 | sizeof | 操作数的类型长度(以字节为单位) |
注意:sizeof是操作符,可以求变量(类型)所占空间的大小
前++或前- - | 后++或后- - |
---|---|
先自增或自减再进行其他运算 | 先进行其他运算后再自增或自减 |
关系操作符
符号 | 含义 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 大于 |
!= | 用于测试“不相等” |
== | 用于测试“相等” |
在编程过程中注意==与=的使用
逻辑操作符
逻辑与 | 逻辑或 |
---|---|
&& | || |
对于按位操作符和逻辑操作符要加以区分
逻辑操作符会返回一个布尔值
代码示例:
#include<stdio.h>
void main()
{
printf("1&&2 = %d\n", 1 && 2); //1
printf("1&2 = %d\n", 1 & 2); //0
printf("1||2 = %d\n", 1 || 2); //1
printf("1|2 = %d\n", 1 | 2); //3
}
逻辑与&&与逻辑或||都是短路操作符;
当逻辑与&&的第一个操作数为假时便不再往后执行,结果必为假;
当逻辑或||的第一个操作数为真时便不再往后执行,结果必为真。
代码示例:
#include<stdio.h>
void main()
{
int i = 0, a = 0,b = 2,c = 3, d = 4;
i = a++ && ++b && d++;
printf("i=%d\n", i); //0
printf("a=%d\n", a); //1
printf("b=%d\n", b); //2
printf("c=%d\n", c); //3
printf("d=%d\n", d); //4
}
条件操作符
exp1 ? exp2 : exp3 |
---|
当exp1为真时,结果为exp2;否则结果为exp3 |
#include<stdio.h>
void main()
{
int a = 6;
int b;
if (a < 5)
{
b = 3;
}
else
{
b = -3;
}
printf("b = %d\n", b); //-3
//上述if-else语句可以用条件操作符实现
int c;
c = (a < 5) ? 3 : -3;
printf("c = %d\n", c); //-3
}
逗号表达式
exp1, exp2, …, expN |
---|
用逗号隔开多个表达式,从左向右依次执行;
整个表达式的结果时最后一个表达式的结果。
代码示例:
#include<stdio.h>
void main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
printf("c = %d\n", c); //13
int d = -3;
if (a = b + 1, c = a / 2, d > 0) //d<0,所以执行else
{
printf("真\n");
}
else
{
printf("假\n"); //将会输出这句
}
}