#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//算术操作符
//int main()
//{
// //% 取模操作符两端必须是整数
// int a = 7 % 2;//1
// int b = 7 / 2;//3
// printf("%d\n%d", a, b);//输出结果为1 3
// return 0;
//}
//移位操作符
//原码
// -3的原码
// 10000000 00000000 00000000 00000011 第一位时符号位,0代表为正数,1代表为负数
//反码
// 3的反码
// 11111111 11111111 11111111 11111100 反码是原码除了符号位不变以外,其他0->1,1->0
//补码
// -3的补码
// 11111111 11111111 11111111 11111101 补码就是反码加一
//正整数的原码、补码、反码相同
//整数在内存中存储的是补码
// 移位操作符移的是内存中的补码
//int main()
//{
// int a = 3;
// int b = a << 1;//"<<"为左移操作符,左移之几位后,在后面补几位0
// printf("%d\n", a);
// printf("%d\n", b);
// return 0;
//}
//int main()
//{
// int a = 3;
// int b = a >> 1;
// printf("%d\n", a);//">>"为右移操作符,右移分为算术右移和逻辑右移,算数右移是右移几位,在前面补几位它的符号位
// //逻辑右移是右移几位,在前面补几位0
// printf("%d\n", b);
// return 0;
//}
//
//位操作符(操作数必须是整数)
// & 按位与(两串补码并列摆放,如果两个补码同时为1,就是1,不是如此就是0)
// | 按位或(两串补码并列摆放,如果两个补码同时为0,就是0,不是如此就是1)
// ^ 按位异或(两串补码并列摆放,如果上下两个数字相同,则为0,相异就为1)
//3^3=0-->a^a=0
// 0^a=a
//011 3用二进制表达
//011
//000 按位异或计算得出
//3^5^3
//011
//101
//110
//101 3^5^3的最终结果为5
//3^3^5等于5
//0^5
//000
//101
//101
//赋值操作符
//一个‘=’符号是赋值,两个‘==’符号才是等于
//int main()
//{
// int a = 3;
// int b = 5;
// if (b == 5)
// {
// printf("哈哈\n");
// }
// printf("a=%d b=%d", a, b);
// return 0;
//}
//单目操作符(只有一个操作数)
//逻辑操作符
// &&(并且) ||(或者)
//如果&&左边为真,符号两边都要计算。如果&&左边为假,右边就不用计算了
//如果||左边为真,后面的表达式就不用计算了,如果||左边为假,后面表达式依次计算直到为真
//条件操作符
// (表达式一)?(表达式二):(表达式三)
//如果表达式一为真,结果为表达式二,不然则为表达式三
//逗号表达式
//逗号表达式,就是用逗号隔开的多个表达式
// 逗号表达式,从左往右依次执行,整个表达式结果为最后一个表达式
//int main()
//{
// int a = 1;
// int b = 2;
// int c = (a > b, a, a = b + 10, b = a + 1);
// //c=13
// printf("%d\n", c);
// return 0;
//}
//int main()
//{
// int a[10] = { 0 };
// a[7] = 10;
// //7[a]=10;//(这是另外一种写法)等价于a[7]=10;
// printf("%d\n", a[7]);
// int* p = &a;//将数组a中的首元素地址赋给p,所以p为指针变量,int*代表p为整形类型
// *(p + 7) = 10;//(p+7)就是跳过7个元素,指向数组中第8个元素,*(p+7)就是第8个元素
// printf("%d\n", a[7]);
// return 0;
// //输出结果都为10
// //a[7]等价于*(p+7)
//}
//函数调用至少得有一个操作数
//void menu()
//{
// printf("菜单\n");
// printf("辣椒炒肉--5元\n");
// printf("回锅肉--10元\n");
// printf("、、、、、、\n");
//}
//int main()
//{
// menu();//打印菜单,函数调用可以不传参数“()”为函数调用操作符
//}
//结构体指针->结构体成员等价于(结构体对象.成员)
//
//整形提升
//一个字节等于8个比特位(bytle)
//int main()
//{
//
// //char数据类型占一个字节
// char a = 5;//数字5是整形数据所占4个字节
// //00000000000000000000000000000101 5的补码
// //00000101 数字存入char类型中会被截断为1个字节也就是8个比特位,因为补码的第一位为符号位,0为正,1为负
// char b = 126;
// //00000000000000000000000001111110 126的补码
// //01111110
// char c = a + b;
// //a+b
// //00000000000000000000000000000101
// //00000000000000000000000001111110
// //00000000000000000000000010000011 a+b
// //10000011 c
// //因为要以整形输出,c是char型数据是1个字节,int型数据是4个字节,所以在前面补c的符号位
// //11111111111111111111111110000011
// //因为是要以整形输出,所以要将补码转化为原码
// //10000000000000000000000001111101 -125
// printf("%d\n", c);//输出结果为-125
// return 0;
//}
//先比较操作符的优先级,当优先级相同时,比较操作符的结合性
操作符还有很多,我只选取了一些比较常用的。