目录
5.1.3位操作符: &安位与, | 按位或 , ^按位异或
5.1.4赋值操作符:= ,+=, -=, *=, /=, &=, ^=, |=, >>=, <<=
5.1初遇操作符
5.1.1算数操作符:+ 、-、 * 、/、 %
#include <stdio.h>
int main()
{
int a = 1 + 3;
int b = 72 - 6;
int c = 32 * 8;
//注意在运算过程中当两边都是整数时程序会执行整数除法,如果一边位小数执行小数运算
int d = 6 / 3;
printf("%d \n", a);
printf("%d\n",b);
printf("%d\n", c);
printf("%d\n", d);
//取模(得到余数)
int f = 9 % 2;
printf("%d\n",f);
return 0;
}
5.1.2移位操作符:>>右移 左移 <<
int main()
{
int a=2;
int b=a<<1;
printf("%d\n",b);
return 0;
}
注释:左移操作符 ----移动的是二进制位
5.1.3位操作符: &安位与, | 按位或 , ^按位异或
5.1.4赋值操作符:= ,+=, -=, *=, /=, &=, ^=, |=, >>=, <<=
例如
#include <stdio.h>
int main()
{
int a = 6;
a = a + 5;
a = 6;
a += 5;
a = a - 3;
a -= 3;
a = a % 3;
a %= 3;
printf("%d \n",a);
return 0;
}
单目操作符与双目操作符
双目操作符:1+3 这里的加号有两个操作数就称为双目操作符
单目操作符:只有一个操作数,就称为单目操作符
! | 逻辑反操作 |
---|---|
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 前置、后置 -- |
++ | 前置、后置 ++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制转换类型 |
// !逻辑取反案例
#include <stdio.h>
int main()
{
//0 表示假 非0就是真
int a = 0;
printf("%d \n",!a);
if (a) {
//当a为真,执行
}
if (!a)
{
//当a为假,执行
}
}
//sizeof案例
#include <stdio.h>
int main()
{
//sizeof是一个操作符
//计算数据类型大小
int y = 6;
printf("%d \n",sizeof(int));
printf("%d \n", sizeof(y));
return 0;
}
//sizeof计算数组案例
#include <stdio.h>
int main()
{
//5*4=20
int yin[5] = {0};
printf("%d \n", sizeof(yin));//在这里所计算的是数组的总大小单位为字节 20
printf("%d \n", sizeof(yin[5]));
//计算数组元素个数如下
int sz= sizeof(yin) /sizeof(yin[0])
printf("%d \n",sz)
return 0;
}
//int main()
{
int a=0;
printf("%d \n", ~a)//~按*(二进制)位取法 把所有二进制中数,1变成0,0变成1;
return 0;
注意:对于整数在内存中储存的是补码,一个正整数的二进制表示有三种。
例如:-1
原码:10000000000000000000000000000001
反码:11111111111111111111111111111110
补码:11111111111111111111111111111111(红色字体为符号位)
原码变反码符号位不变,其他位按位取反,反码变补码反码加一。正整数原码、补码、反码相同
加加减减
#include <stdio.h>
int main()
{
int y = 15;
int z = ++y;//前置++ 先++ 后使用
printf("%d \n",y);
printf("%d \n",z);
int yi = 15;
int zw = y++;//后置++ 后使 用先++
printf("%d \n", yi);
printf("%d \n", zw);
return 0;
}
//输出结果位
//16
//16
//15
//16
强转
当两个数据类型不匹配时就需要用到数据类型转换。
int main()
{
//强制转换数据类型
int y = 1.1;
printf("%d \n",y);
return 0;
}
此代码编译时会出现警告如图
在这时就需要用到转换数据类型:
int main()
{
//强制转换数据类型
int y = (int)1.1;
printf("%d \n",y);
return 0;
}
5.1.2关系运算符:> , >=,<,<=,!= ,== 。此类运算符用于测试看是否相等时用。
5.1.3逻辑操作符; 逻辑与:&& ,逻辑或:||。
int main()
{
int a = 1;
int b = 5;
int c = a && b;
printf("%d \n", c);
return 0;
}
int main()
{
int a = 1;
int b = 0;
int c = a && b;
printf("%d \n", c);
return 0;
}
逻辑&&:当两个数据都满足条件时,最终的结果才为真。
int main()
{
int a = 1;
int b = 0;
int c = a || b;
printf("%d \n", c);
return 0;
}
逻辑与 ||:当两个数据其中有一个为真时最终解解结果为真
5.1.4条件操作符:exp1? exp2:exp3.(又称三目操作符)
当exp1 成立,exp2计算,整个表达式的结构是:exp2的结果
当exp1 不成立,exp3计算,整个表达式的结构是:exp3的结果
int main()
{
int d = 3;
int y = 2;
int max = 3;
//if (d > y) {
// max = y;
//}
//else {
// max= d;
//}
max = d > y ? d : y;//表达式一
return 0;
}
5.1.5逗号表达式是:逗号隔开的一串表达式
int main()
{
/*(2, 4 + 5, 6)*/
int a = 3;
int b = 5;
int c = 9;
int d = (a = b + 2, c = a - 4, b = c + 2);
//逗号表达式,是从左往右依次计算
//整个表达式的结果是最后一个表达是
printf("%d \n",d);
return 0;
}
5.1.6下标引用、函数调用和结构成员:[] () . ->
(1)下标引用[]
int main()
{
int arr[7] = { 1,2,3,4,5,6,7 };
printf("%d \n", arr[5]);
return 0;
}
这里的 [ ] 就是下表 引用操作符
(2)函数调用操作符()
int main()
{
//调用函数的时候,函数名后边的()就是函数调用操作符
printf("尹子里\n");
return 0;
}