位运算符的学习

本文详细介绍了移位运算符(左移和右移)的工作原理,以及按位取反、按位与、异或和或运算符的运算规则。特别强调了它们在数值处理中的应用,如数值交换、单例检测和数值转换等。同时提到了无符号和有符号数的补码概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

总结:

1.移位运算符:

2.按位运算符

一、移位运算符

二、按位取反运算符、按位与运算符、按位异或运算符和按位或运算符

ps:无符号和有符号的补码圈:


总结:

1.移位运算符:

i<<j 将操作数i的二进制数据左移j位,在最右端补0;

i>>j 将操作数i的二进制数据右移j位,若i为非负值或者无符号数,在最左端补0;

                                                           当i为负值,为了保留符号位补1还是补0是不                                                                                     确定的,但一般来说是补符号位。

2.按位运算符

(1)&双1为1,其余为0

(2)|双0为0,其余为1

(3)^相同为0,其余为1或者无进位相加

(4)~遇1变0,遇0变1

一、移位运算符

移位运算符含义
<<左移位
>>右移位

移位运算符的优先级比算术运算符的优先级低。

这两个操作符是对操作数的二进制形式进行操作。

左移位i<<就是将i的二进制数进行左移,并且在i的最右端进行补0:

可以看到此时的i的二进制中的1向左移动了一位,i从1变成了2.

右移位就是将操作数的二进制形式右移一位,如果i是无符号数或者非负值,则在i的最左端进行补0;如果i是负值,那右移后是在最左端补0还是为了保存符号位而补1是不确定的,在vs中是补符号位。

-1的二进制形式为全1

在这里我们可以发现左移可以实现*2的效果,右移可以实现/2的效果。

值得注意的是:位运算并不会改变操作数的值

我们可以看到i的值并没有发生变化。

当你想要通过位运算符改变操作数的值,有以下几种方式:

1.   i=i<<j

2.   i<<=j

值得注意的是:i<<2+1相等于i<<(2+1)而不是(i<<2)+1

二、按位取反运算符、按位与运算符、按位异或运算符和按位或运算符

符号含义
~按位取反
&按位与
^按位异或
|按位或

其中~是一元运算符

这四个位运算符运算规则如下:

这四个运算符的优先级如下:

优先级运算符
最高~
&
^
最低|

位的设置、清除与检测

(1)位的设置:将i的第j位设置为1

i|=1<<j

(2)位的清除:将i的第j位设置为0

i&=~(1<<j)

(3)位的检测:检测i的第j为是否被设置为1

if(i&1<<j)

位运算符的一些使用:

1.不用创建第三变量而实现两个数的交换:

2.单身狗等问题的解决,当有一堆数字,其中数字都是成对出现,只有一个数字是单独的,找出这个数字。

3.将正数变为负数,将负数变为正数

4.统计i的二进制中1的个数

ps:无符号和有符号的补码圈:

无符号:

有符号:

三、知识点应用

1.给一个数n,确定它二进制第x位是0或者是1:

(n>>x)&1

2.将一个数n,二进制第x位修改为1:

n|=(1<<x)

3.将一个数n,二进制第x位修改为0:

n&=(~(1<<x))

4.提取一个数n二进制中最右边的1:

n&(-n)

5.干掉一个数n二进制最右边的1:

n&(n-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值