C/C++编程知识:运算符(二)丨按位运算符,知识点详解

在C中,以下6个运算符是按位运算符(在位级别工作)

2f45765d4d36dc86ae34e733d3f33b25ea144c2d.jpg

 

C或C ++中的&(按位与)将两个数字作为操作数,并对两个数字的每一位进行“与”运算。仅当两个位均为1时,AND的结果才为1。

在C或C ++中(按位或)将两个数字作为操作数,并对两个数字的每一位进行“或”运算。如果两个位中的任何一位为1,则OR的结果为1。

C或C ++中的^(按位异或)将两个数字用作操作数,并对两个数字的每一位进行异或。如果两个位不同,则异或的结果为1。

在C或C ++中,<<(左移)采用两个数字,左移第一个操作数的位,第二个操作数确定要移位的位数。

C或C ++中的>>(右移)采用两个数字,右移第一个操作数的位,第二个操作数确定要移位的位数。

C或C ++中的〜(按位非)取一个数字并将其所有位求反

代码举例:

72f407b7731ae0011f65a540262a39c8041b9a8a.png

 

输出:

a = 5,b = 9

a&b = 1

a | b = 13

a ^ b = 12

〜a = 250

b << 1 = 18

b >> 1 = 4

关于按位运算符的有趣事实

(1)左移位运算符和右移位运算符不应用于负数。如果任何一个操作数为负数,则会导致未定义的行为。例如,-1 << 1和1 << -1的结果均未定义。另外,如果数字移位的幅度大于整数的大小,则行为是不确定的。例如,如果整数使用32位存储,则1 << 33是未定义的。

(2)从技术面试的角度来看,按位异或运算符是最有用的运算符。 它用于许多问题。一个简单的例子就是“给出一组数字,其中所有元素除一个数字外均出现偶数次,找到奇数出现的数字”。只需对所有数字进行异或运算,就可以有效地解决此问题。

681b51b023b70022f048deffeac1b79bb2a7b7e7.png

 

输出:出现奇数的元素是90

(3)不应使用按位运算符代替逻辑运算符。逻辑运算符(&&,||和!)的结果为0或1,但按位运算符返回整数值。另外,逻辑运算符会将任何非零操作数都视为1。例如,考虑以下程序,对于相同的操作数,&和&&的结果是不同的。

e9f3a729e560d49e1ae17fb6a4c37378c057a8ee.png

 

(4)左移和右移运算符分别等于乘和除以2。如第1点所述,它仅在数字为正数时起作用。

e09105f1489ecd4050841b1102713f1111a24c7f.png

 

输出:x << 1 = 38x >> 1 = 9

(5)&运算符可用于快速检查数字是否为奇数或偶数。仅当x为奇数时,表达式(x&1)的值才为非零,否则值为零。

c07c583cf026560ef808db06f821c26d7dccd4ff.png

 

(6)〜运算符应小心使用。如果结果的〜运算符存储在一个无符号变量中,那么它的结果可能是一个大数。如果结果存储在有符号变量中,则结果可能是负数(假设负数以2的补码形式存储,其中最左边的位是符号位)

希望对大家有帮助!

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,QQ群464501141点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍分享:

编程学习视频分享:

在C中,以下6个运算符是按位运算符(在位级别工作)

1240

C或C ++中的&(按位与)将两个数字作为操作数,并对两个数字的每一位进行“与”运算。仅当两个位均为1时,AND的结果才为1。

在C或C ++中(按位或)将两个数字作为操作数,并对两个数字的每一位进行“或”运算。如果两个位中的任何一位为1,则OR的结果为1。

C或C ++中的^(按位异或)将两个数字用作操作数,并对两个数字的每一位进行异或。如果两个位不同,则异或的结果为1。

在C或C ++中,<<(左移)采用两个数字,左移第一个操作数的位,第二个操作数确定要移位的位数。

C或C ++中的>>(右移)采用两个数字,右移第一个操作数的位,第二个操作数确定要移位的位数。

C或C ++中的〜(按位非)取一个数字并将其所有位求反

代码举例:

1240

输出:

a = 5,b = 9

a&b = 1

a | b = 13

a ^ b = 12

〜a = 250

b << 1 = 18

b >> 1 = 4

关于按位运算符的有趣事实

(1)左移位运算符和右移位运算符不应用于负数。如果任何一个操作数为负数,则会导致未定义的行为。例如,-1 << 1和1 << -1的结果均未定义。另外,如果数字移位的幅度大于整数的大小,则行为是不确定的。例如,如果整数使用32位存储,则1 << 33是未定义的。

(2)从技术面试的角度来看,按位异或运算符是最有用的运算符。 它用于许多问题。一个简单的例子就是“给出一组数字,其中所有元素除一个数字外均出现偶数次,找到奇数出现的数字”。只需对所有数字进行异或运算,就可以有效地解决此问题。

1240

输出:出现奇数的元素是90

(3)不应使用按位运算符代替逻辑运算符。逻辑运算符(&&,||和!)的结果为0或1,但按位运算符返回整数值。另外,逻辑运算符会将任何非零操作数都视为1。例如,考虑以下程序,对于相同的操作数,&和&&的结果是不同的。

1240

(4)左移和右移运算符分别等于乘和除以2。如第1点所述,它仅在数字为正数时起作用。

1240

输出:x << 1 = 38x >> 1 = 9

(5)&运算符可用于快速检查数字是否为奇数或偶数。仅当x为奇数时,表达式(x&1)的值才为非零,否则值为零。

1240

(6)〜运算符应小心使用。如果结果的〜运算符存储在一个无符号变量中,那么它的结果可能是一个大数。如果结果存储在有符号变量中,则结果可能是负数(假设负数以2的补码形式存储,其中最左边的位是符号位)

希望对大家有帮助!

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍分享:

编程学习视频分享:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值