操作符讲解(1)
算术操作符
+ - * / %
1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数
2.对于/操作符如果两个操作数都为整数,执行整数出发.而只要浮点数执行的就是浮点数除法
3.%操作符的两个操作数必须为整数。返回的是整除之后的余数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//操作符解释
int main()
{
float a = 6.0/5;
printf("%f\n", a);
return 0;
}
int main()
{
int a = 7 % 3;//模只能为整数
printf("%d\n", a);
return 0;
}
移位操作符
<< >>
左移操作符:左边抛弃,右边补0
右移操作符:
1.逻辑移位:左边补0,右边丢弃
2.算术移位:左边用原该值的符号位填充,右边丢弃
int main()
{
int a = 2 ;
//把a的二进制位向左移动一位
int b = a << 1;
int d = a >> 1;
//针对负数:一个整数的二进制表示有3种
//原码:二进制
//反码:符号位不变 其他按位取反
//补码:反码+1
printf("b = %d\n", b);
printf("d = %d\n", d);
}
位操作符
&:按位与 |:按位或 ^:按位异或
注:他们的操作数必须是整数
int main()
{
int a = 3;
int b = 5;
// & - 按(2进制)位与 对应的二进制位只要有0就是0 两个位都是1 按位与出来才是1
int c = a & b;
//对应的二进制位 有1则为1 两个为0则为0
int d = a | b;
//对应的二进制位进行异或
//规则:相同为0,相异为1
int e = a ^ b;
printf("c = %d\n", c);
printf("d = %d\n", d);
printf("e = %d\n", e);
//3的二进制位:00000000000000000000000000000011
//5的二进制位:00000000000000000000000000000101
return 0;
}
//一道面试题 不能创建第三个值 把a,b的值进行交换
int main()
{
int a = 2020;
int b = 2002;
//两个相同数字异或时等于0
//0和任何一个数字异或时就是他本身
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d", a, b);
return 0;
}
赋值操作符
= += -= /= >>= <<= %=
int main()
{
//一个=是赋值
//两个==是判断
int a = 10;
a += 3;
printf("%d\n",a);
return 0;
}
单目操作符
!:逻辑反操作 - + &:取地址 sizeof:计算类型的长度 ~:按位取反 -- ++ * (类型)
//!:逻辑反操作
int main()
{
//单目操作符 - 只有一个操作数的操作符
//flag为真,打印真
int flag = 5;
if (flag)
{
printf("真\n");
}
//falg为假,打印假
if(!flag)
{
printf("假\n");
}
}
//sizeof操作符
int main()
{
//sizeof是操作符,不是函数
int a = 10;
char arr[10] = 0;
printf("%d\n", sizeof(a));//计算a所占空间的大小,单位是字节
}
int main()
{
//练习题 算下两个数是多少
short s = 5;
int a = 10;
printf("%d\n", sizeof(s = a + 2));//sizeof括号中的表达式是不参加运算的!
printf("%d\n", s);
}
// ~:按位取反操作符
int main()
{
int a = -1;
//10000000000000000000000000000001 - 原码
//11111111111111111111111111111110 - 反码
//11111111111111111111111111111111 - 补码
// ~按位取反
int b = ~a;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
//++ --操作符
int main()
{
int a = 10;
int b = a++;//后置++ 先使用,后++
int c = ++a;//前置++ 先加加,后使用
printf("%d\n", a);//12
printf("%d\n", b);//10
printf("%d\n", c);//12
}
//&和* 操作符
int main()
{
int a = 10;
printf("%p\n", &a);// &取地址操作符
int* pa = &a;//pa是用来存放地址的 -pa就是一个指针变量
*pa = 20;//* 解引用操作符 - 间接访问操作符
printf("%d\n", a);
return 0;
}
//(类型)操作符
int main()
{
int a = (int)3.14;//强制类型转换
return 0;
}
关系操作符
> >= < <= !=:用于测试不相等 ==:用于测试相等
int main()
{
int a = 3;
int b = 5;
if (a == b)//如果a等于b 那么做什么事
{
}
else if (a != b)//如果a不等b,做什么事
{
}
return 0;//比较两个字符 不能用==
}
逻辑操作符
&&:逻辑与 ||:逻辑或
int main()
{
int a = 3;
int b = 0;
if (a && b)//如果A为真 B为真 才进循环
{
}
if (a || b)//如果AB有一个为真 就为真
return 0;
条件操作符
exp1? exp2: exp3
//条件操作符
int main()
{
int a = 3;
int b = 0;
b = (a > 5 ? 1 : -1);//如果a大于5 那么 1的值赋给b 如果a不大于5 那么-1的值赋给b
return 0;
}
逗号表达式
exp1, exp2, exp3, ...expN
逗号表达式 - 要从左向右一次计算,但是整个表达式的结果是最后一个表达式的结果
int main()
{
//逗号表达式 - 要从左向右一次计算,但是整个表达式的结果是最后一个表达式的结果
int a = 3;
int b = 5;
int c = 0;
int d = (c = 5, a = c + 3, b = a - 4, c += 5);
printf("%d\n", d);//10
printf("%d\n", c);//10
printf("%d\n", b);//4
printf("%d\n", a);//8
}