移位操作符.位操作符,sizeof



移位操作符


<< 左移操作符

>> 右移操作符

左移操作符

移位规则:左边抛弃、右边补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








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值