移位操作符(<<左移操作符 、 >>右移操作符)和位操作符(&按位与、 |按位或、 ^按位异或)和逻辑操作符(&&逻辑与、 ||逻辑或)

移位操作符:<<左移操作符 、 >>右移操作符

在使用它们之前,它们的操作数只能是整数,它们都是对整数的二进制操作

1、 <<左移操作符

操作原则:左边抛弃、右边补0

2、 >>右移操作符 

操作原则:

右移运算分两种:
1. 逻辑移位
左边用0填充,右边丢弃


2. 算术移位
左边用原该值的符号位填充,右边丢弃

 在大部分编译器中,执行的都是算术右移,因为算术右移保持原来的正负,保留符号位。

逻辑右移过于简单粗暴

位操作符:&(按位与)、|(按位或)、^(按位异或)

在使用它们之前,它们的操作数只能是整数,它们都是对整数的二进制操作

 1 、 &(按位与):

计算法则:对应的二进制位上,有0则为0,全1则为1

例如:

int a = 3;
int b = 5;
int c = a & b;
//00000000000000000000000000000011  ———— a
//00000000000000000000000000000101  ———— b
//00000000000000000000000000000001  ———— c
//所以 a & b=1;

在计算机的计算都是按照补码进行计算的,

正数的原码、反码、补码都是一样的

而负数则要将原码准换为反码,再将反码准换为补码进行计算

有一点要注意的是,打印变量时,是用其原码打印的,所以如果结果是负数的补码,我们要算出负数的原码进行打印;

例如:

int a = 3;
int b = -5;
int c = a & b;
//00000000000000000000000000000011  ———— a
//10000000000000000000000000000101  ———— b
//11111111111111111111111111111010  ———— b的反码
//11111111111111111111111111111011  ———— b的补码

//00000000000000000000000000000011  ———— a
//11111111111111111111111111111011  ———— b的补码
//00000000000000000000000000000011  ———— c的补码(因为c的补码为正,正数的原码反码补码相同)
//所以 a & b=3

2、 |(按位或):

计算法则:对应的二进制位上,有1则为1,全0则为0

例如:

int a = 3;
int b = -5;
int c = a | b;
//00000000000000000000000000000011  ———— a
//10000000000000000000000000000101  ———— b
//11111111111111111111111111111010  ———— b的反码
//11111111111111111111111111111011  ———— b的补码

//00000000000000000000000000000011  ———— a
//11111111111111111111111111111011  ———— b的补码
//11111111111111111111111111111011  ———— c的补码
//10000000000000000000000000000100  ———— c的反码
//10000000000000000000000000000101  ———— c的原码
//所以 a | b=-5

计算出来的补码,我们要将其转换成原码

3、 ^(按位异或):

计算原则:对应的二进制位上,相同为0,相异为1

例如:

int a = 3;
int b = -5;
int c = a ^ b;
//00000000000000000000000000000011  ———— a
//10000000000000000000000000000101  ———— b
//11111111111111111111111111111010  ———— b的反码
//11111111111111111111111111111011  ———— b的补码

//00000000000000000000000000000011  ———— a
//11111111111111111111111111111011  ———— b的补码
//11111111111111111111111111111000  ———— c的补码
//10000000000000000000000000000111  ———— c的反码
//10000000000000000000000000001000  ———— c的原码

//所以a ^ b = -8

逻辑操作符:&&(逻辑与)、 ||(逻辑或)

1、 &&(逻辑与):

计算原则:同真为真,有假则假

#include<stdio.h>


int main()
{
	int a = 0, b = 2;
	int i = a && b;
	printf("%d\n", i);
	return 0;
}

 因为a=0(为假),b=2(为真),所以 a && b 为假,结果为0

——————————————————————————————————————————

  因为a=1(为真),b=2(为真),所以 a && b 为真,结果为1

 ——————————————————————————————————————————

   因为a=0(为假),b=0(为假),所以 a && b 为假,结果为0

2、 ||(逻辑或):

计算原则:有真则真,全假则假

#include<stdio.h>


int main()
{
	int a = 0, b = 2;
	int i = a || b;
	printf("%d\n", i);
	return 0;
}

  因为a=0(为假),b=2(为真),所以 a || b 为真,结果为1

——————————————————————————————————————————

  因为a=1(为真),b=2(为真),所以 a || b 为真,结果为1

——————————————————————————————————————————

   因为a=0(为假),b=0(为假),所以 a || b 为假,结果为0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿拉保

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值