位运算符讲解

目录

                                                与(&)

                                                或(|)

                                                非(~)

                                                异或(^)

                                                移位运算符

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        1.>> 右移 

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ 2.<<左移


 

最近接触了位运算符,我认为位运算符在一些题中的使用是很巧妙得,而且它也是算是一个入门算法。

位运算符有,与,或,非,异或,移位运算符

位运算符实际是采取二进制进行运算,

                                                与(&)

             两个二进制操作数对应位同为1 结果位 才为1,其余情况为0;

   10进制数        15            二进制    00001111

                          14                          00001110

15&14=  14(00001110)

# include <stdio.h>
int main()
{
	printf("%d",14&15);
	return 0;
 } 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5biu5oiR5oOz5Liq5ZCN5a2X5ZCn,size_18,color_FFFFFF,t_70,g_se,x_16

 

                                                或(|)

                  两个二进制操作数对应位只要有一个为1 结果位 就为1,其余情况为0

 10进制数        15            二进制    00001111

                        14                           00001110

15|14=15(00001111)

# include <stdio.h>
int main()
{
	printf("%d",14|15);
	return 0;
 } 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5biu5oiR5oOz5Liq5ZCN5a2X5ZCn,size_20,color_FFFFFF,t_70,g_se,x_16

                                          非(~)

              一个二进制操作数,对应位为0,结果位为1;对应位为1,结果位为0;

取反后得到的是原码   而进行存储时是存储的补码,得到补码的过程要先得到反码

 10进制数       8           二进制    0000 1000

      (~8)=-9(1000 1001)

   取反后原码:1111 0111

   取反后反码:1000 1000(除了符号位 其余位都进行取反操作)

   取反后补码:1000 1001  补码(因为为负数所以加一) 如果为正数不需要进行加一 

             

# include <stdio.h>
int main()
{
	printf("%d",~15);
	return 0;
	//00001000
	//11110111      取反原码
	//10001000      取反反码
	//10001001      补码(因为为负数所以加一)  
	        
 } 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5biu5oiR5oOz5Liq5ZCN5a2X5ZCn,size_20,color_FFFFFF,t_70,g_se,x_16

 

                                                   异或(^)

            同为假,异为真

10进制数        15            二进制    00001111

                        14                           00001110

15^14=1(0000001)

# include <stdio.h>
int main()
{
	printf("%d",14^15);
	return 0;

 } 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5biu5oiR5oOz5Liq5ZCN5a2X5ZCn,size_20,color_FFFFFF,t_70,g_se,x_16

 

                         移位运算符

1.>> 右移 

 按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。(高位用符号位补充-------正数右移还是正数    负数右移还是负数)

语法:需要移位的数字number >> 移位的次数

13>>2=3

13的二进制位(1101)向右移动两位变成3(11)

性质(在整数下):右移相当于用该数除以2的移位次数再向下取整

13/(2^2)向下取整为3

2.<<左移

将一个数的二进制同时往左移位,低位用0补充

5<<1=10

5(101)向右移动1位 (1010)=10、

性质同上右移

是5*2^1=10

 

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论 16

打赏作者

小唐同学(๑>؂<๑)

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值