移位操作符
<<左移
>>右移
#include<stdio.h>
int main(){
int a=5/2;
int b=5%2;//取模
printf("%d\n%d",a,b);// 2 1
return 0;
}
#include<stdio.h>
int main(){
//(2进制)移位操作符
// <<左移
// >>右移
int a=1;
//整型 1 占4个字节- 32bit 位
//00000 00000 00000 00000 00000 00000 01
int b=a<<2;
printf("%d\n",b);//4
printf("%d\n",a);//1 不变
return 0;
}
按位操作符
(2进制) 位操作
& 按位与
#include<stdio.h>
int main(){
//(2进制) 位操作
// & 按位与
int a=3;
int b=5;
int c=a&b;
//011
//101
//001
printf("%d\n",c);//1
return 0;
}
| 按位或
#include<stdio.h>
int main(){
int a=3;
int b=5;
int c=a|b;
//011
//101
//111
printf("%d\n",c);//7
return 0;
}
^ 按位异或
#include<stdio.h>
int main(){
int a=3;
int b=5;
int c=a^b;// ^ 是异或 对应的二进制位 相同则为0,相异为1
//011
//101
//110
printf("%d\n",c);//6
return 0;
}
运算符简写
单目运算符
//单目运算符
#include<stdio.h>
int main(){
int a=10;
int b=20;
printf("%d\n",a);// 10
printf("%d\n",!a); // 0 // ! 逻辑反操作
return 0;
}
sizeof 操作数的类型长度
#include<stdio.h>
int main(){
int b=10;
//sizeof 计算的是变量/类型所占空间的大小,单位是字节
printf("%d\n",sizeof(b));//4
printf("%d\n",sizeof(int));//4
printf("%d\n",sizeof b);//4
//printf("%d\n",sizeof int); err //必须添加()
int arr[10]={0};
//10*sizeof(int)=40
printf("%d\n",sizeof(arr)); //40
//计算数组的元素个数
//个数=数组总大小/单个元素的大小
int sz=0;
sz=sizeof(arr)/sizeof(arr[0]);
printf("sz=%d\n",sz);//10
return 0;
}
~——按(2进制)位取反
#include<stdio.h>
int main(){
int a=0;
int b=~a;//b是有符号的整型
//~——按(2进制)位取反
//00000000000000000000000000000000
//11111111111111111111111111111111
//原码、反码、补码
//负数在内存中存储的时候,存储的是二进制的补码
//11111111111111111111111111111111
//11111111111111111111111111111110
//10000000000000000000000000000001
printf("%d\n",b);// -1 //使用的,打印的是这个数的原码
return 0;
}
原码 、反码、 补码 的计算规则
++,--运算符
a++,后置++,先使用,再++
++a,前置++,先++,再使用
强制类型转换
#include<stdio.h>
int main(){
int a=(int)3.14;//double—>int
printf("%d\n",a);//3
return 0;
}