#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
// >> 右移操作符(二进制位)
int a = 16; //0000000000010000
int b = a >> 1; //0000000000001000
int c = 0;
//算数右移 右边丢弃,左边补符号位
//逻辑右移 右边丢弃,左边补0
printf("%d\n", b);
// << 左移操作没有区分,左边丢弃 右边补零
//对于移位行为,不要移动负数位(a<<-1//error)
// & 按位与
a = 5;
b = 3;
c = a&b;
printf("%d\n", c);
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000001
// | 按位或
a = 5;
b = 3;
c = a|b;
printf("%d\n", c);
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000111
// ^ 按位异或
//相同为0,相异为1
a = 5;
b = 3;
c = a^b;
printf("%d\n", c);
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000110
//不产生临时变量 交换两个数的值
//方法一 加减法
//a=a+b;
//b=a-b;
//a=a-b;
//该方法可能产生溢出
//方法二 异或法
//a=a^b;
//b=a^b;
//a=a^b;
// ~ 按位取反
//sizeof操作符
short x = 0;
a = 10;
printf("%d\n", sizeof(x = a + 5));
printf("%d\n", x);
//sizeof可以计算表达式,但是表达式不会真实运算
int arr[10] = { 0 };
char ch[10] = { 0 };
printf("%d\n", sizeof(ch)); //10
printf("%d\n", sizeof(arr)); //40
//数组传参使用sizeof()实际上是sizeof(int),因为传递的是一个地址
int i = 0, d = 4;
a = 0, b = 2, c = 3;
i = a++ && ++b && d++;
// 计算 不算 不算(逻辑与,有一个零就停止计算了)
printf("%d %d %d %d\n", a, b, c, d); //1 2 3 4
// 逻辑或正好相反
//三目操作符 exp1?exp2;exp3,1为真,则计算2,否则计算3
//逗号表达式( , , , , )一直算,结果为最后一个表达式的结果
//隐式类型转换:整型提升,算术转换
//关于计算优先级,注意不要写出问题表达式
//写出的表达式需要通过操作符确定出唯一路径
return 0;
}
操作符这一部分比较杂,还是搭配其他知识学习比较好。
最应注意的部分是操作符优先级和问题表达式。