移位操作符
<< 左移操作符
>> 右移操作符
左移操作符
移位规则:左边抛弃、右边补0
右移操作符
移位规则:
首先右移运算分两种:
1. 逻辑移位
左边用0填充,右边丢弃
2. 算术移位
左边用原该值的符号位填充,右边丢弃
警告⚠:
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:
int num = 10;
num>>-1;//error
注意:无符号整数除以2的n次幂相当于右移n位。
如:
4/2替换为4>>1
位操作符
位操作符有:
& //按位与
两个对应的二进位均为1时,结果为1
9&5 9的二进制为00001001
5的二进制为000000101
结果00000001(1的二进制) 9&5=1
特性:
a&a=a;
a&0=0;
a&(-1)=a; //负数用补码做运算
奇数&1=1;偶数&1=0;
一个数持续与其自身做与运算,结果为0.
int main ()
{
int n=2;
while (n)
{
n=n&(n-1);
}//循环跳出,n=0;
return 0;
}
| //按位或 两个对应的二进位有一个为1时,结果为1
9|5 9的二进制为00001001
5的二进制为000000101
结果为00001101(11的二进制) 9|5=11
特性:
a|a=a;
a|0=a;
a|(-1)=(-1);
奇数|1=奇数;偶数|1=偶数+1;
^ //按位异或 当两个对应的二进位相异时,结果为1
9^5 9的二进制为00001001
5的二进制为000000101
结果11110001(241的二进制)
特性:
a^a=0;
a^0=a;
注:他们的操作数必须是整数。
如不能创建临时变量(第三个变量),实现两个数的交换。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}
sizeof 操作数的类型长度(以字节为单位),sizeof不是函数
#include <stdio.h>
int main ()
{
short s=20;
int a=10;
printf("%d\n",sizeof(s=a+1));//只看类型
printf("%d\n",a);
return 0;
}
结果 2 10
printf("%d\n",sizeof(a));
printf("%d\n",sizeof a);
合法
printf("%d\n",sizeof int);
不合法
#include <stdio.h>
int main ()
{
int arr[5];
printf("%d\n",sizeof(arr));//数组名代表整个数组
printf("%d\n",sizeof(&arr));//数组名代表整个数组
return 0;
}
逻辑操作符有哪些:
&& 逻辑与
|| 逻辑或
区分逻辑与和按位与
区分逻辑或和按位或
1&2----->0
1&&2---->1
1|2----->3
1||2---->1
移位操作符.位操作符,sizeof
最新推荐文章于 2023-07-28 12:44:53 发布