#define _CRT_SECURE_NO_WARNINGS 1
//操作符
//算数操作符
#include<stdio.h>
/ %
//int main()
//{
// //int a = 3 / 5;//整数除法
// //float a = 3.0 / 5;//整数除法
// int a = 7 % 3;//两段必须是整数
// printf("%f\n", a);
// return 0;
//}
//移位操作符
//int main()
//{
// int a = -1;
// //把a的二进制向左移动一位,右边补零
// //把a的二进制向右移动一位 1 左边补原符号位(算术右移) 2 左边补零(逻辑右移)
// int b = a >> 1;
// //当前的右移操作符使用的是算术右移
// //a本身不发生变化
// printf("%d\n", b);
// return 0;
//}
//整数的二进制表示形式:其实有3种
//原码:直接根据数值写出的二进制序列就是原码
//反码:原码的符号位保持不变,其他位按位取反就是反码
//补码:反码加一,就是补码
//以上都是负数,对于正整数来说原码反码补码相同
//int main()
//{
// int a = 3;
// int b = 5;
//
// //& - 按(2进制)位与
// /*int c = a & b;*/
// //a 00000000000000000000000000000011
// //b 00000000000000000000000000000101
// //c 00000000000000000000000000000001
//
// //| - 按(2进制)位或
// /*int c = a | b;*/
// //a 00000000000000000000000000000011
// //b 00000000000000000000000000000101
// //c 00000000000000000000000000000111 - 7
//
// //^ - 按(2进制)位异或
// //对应的二进制位进行异或
// //相同为零,相异为一
// int c = a ^ b;
// //a 00000000000000000000000000000011
// //b 00000000000000000000000000000101
// //c 00000000000000000000000000000110 - 6
//
// printf("%d\n", c);
//
// return 0;
//}
//交换
//int main()
//{
// int a = 5;
// int b = 3;
// printf("a = %d b = %d\n", a, b);
// a = a ^ b;
// b = a ^ b;
// a = a ^ b;
// printf("a = %d b = %d\n", a, b);
// return 0;
//}
//int main()
//{
// int a = 13;
// int c = 0;
// int i = 0;
// while (1)
// {
// int b = 0;
// b = a & 1;
// if (b == 1)
// {
// i++;
// }
// a = a >> 1;
// c++;
// if (c == 31)
// {
// break;
// }
//
// }
// printf("%d", i);
// return 0;
//}
//
//int main()
//{
// int a = 13;
// a = a | (1 << 4);
// printf("%d\n", a);
// return 0;
//}
//复合赋值符
//int main()
//{
// int a = 10;
// a = 100;
// //a = a + 100;//
// //a += 100;//两种写法完全等价
// return 0;
//}
// = 赋值
// == 判断
//单目操作符 ! + - & sizeof ~ --(前置、后置) ++(前置、后置) * 强制类型转换
//int main()
//{
// int flag = 0;
// printf("%d\n", !flag);
// //if (flag)
// //{
// // printf("hehe\n");
// //}
// flag为假,打印哈哈
// //if (!flag)
// //{
// // printf("haha\n");
// //}
// return 0;
//}
//int main()
//{
// int a = 10;
// a = -a;
// printf("%d\n", a);
// return 0;
//}
//sizeof
//int main()
//{
// int a = 10;
// int arr[10] = { 0 };
// printf("%d\n", sizeof(a));//计算a所占空间的大小,单位是字节
// printf("%d\n", sizeof(int));//计算a所占空间的大小,单位是字节
// printf("%d\n", sizeof a);//计算a所占空间的大小,单位是字节
// printf("%d\n", sizeof(arr));//计算a所占空间的大小,单位是字节
// //短整形为2个字节
// //sizeof括号中放的表达式是不参与运算的!
//
// return 0;
//}
//int main()
//{
// int a = -1;
// int b = ~a;
// //~按位取反
// printf("%d\n", b);
// return 0;
//}
//int main()
//{
// int a = 10;
// //int b = a++;//后置
// //int b = ++a;//前置
// int b = a--;//后置
// int b = --a;//前置
// printf("%d %d\n", a, b);
// return 0;
//
//}
//int main()
//{
// int a = 10;
// printf("%p\n", &a);//& - 取地址符
// int* pa = &a;
// *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);
// if (a != b);
// if (a <= b);
// if (a >= b)*/;
// //......
// //比较两个字符串相等 不能使用 ==
// //
//}
//
//int main()
//{
// int a = 3;
// int b = 0;
// if (a && b);
// if (a || b);
//
//}
//int main()
//{
// int i = 0, a = 0, b = 2, c = 3, d = 4;
// i = a++ && ++b && d++;
// i = a++ || ++b || d++;
// return 0;
//}
//三目操作符
//int main()
//{
// int a = 3;
// int b = 0;
// b = a > 5 ? 1 : -1;
// printf("%d\n", b);
// return 0;
//
//}
逗号表达式
//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 %d %d %d", a, b, c, d);
// return 0;
//
//}
//
//
//下标引用操作符
//int main()
//{
// int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
// printf("%d\n", arr[4]);//[] - 下标引用操作符 操作数有2个:arr , 4
// return 0;
//}
//函数调用操作符
//int Add(int x, int y)
//{
// return x + y;
//}
//
//int main()
//{
// int a = 10;
// int b = 20;
// int ret = Add(a, b);//() - 函数调用操作符 操作数三个 Add a,b
//
// return 0;
//}
//结构成员访问操作符
//结构体
//struct Book
//{
// //成员变量
// char name[20];
// char id[20];
// int price;
//
//};
//int main()
//{
// struct Book b = { "c语言","c20220402",55 };
// //printf("书名:%s\n", b.name);
// //printf("书号:%s\n", b.id);//点操作符 结构体名.成员名
// //printf("价格:%d\n", b.price);
// struct Book * pb = &b;
// printf("书名:%s\n", pb->name);
// printf("书号:%s\n", pb->id);//结构体指针->成员名
// printf("价格:%d\n", pb->price);
// return 0;
//}
//表达式求值
//整形提升
//int main()
//{
// char a = 3;
// //00000000000000000000000000000011
// //00000011
// char b = 127;
// //00000000000000000000000001111111
// //01111111
// char c = a + b;
// //00000000000000000000000000000011
// //00000000000000000000000001111111
// //11111111111111111111111110000010
// // 10000010 截断
// //发现a和b都是char类型,都没有达到int的大小,这里就会发生整形提升。
// //
// printf("%d\n", c); //11111111111111111111111110000010
//
// return 0;
//}
int main()
{
int a = 4;
int b = 5;
//int c = a + b * a;//优先级决定计算顺序
int c = a + b + a;//优先级不起作用,结合性决定顺序
return 0;
}