初学C语言,请问a |= 0x0002;和a |= 0x0001;分别代表什么意思?谢谢!

 我来答
拥抱Linux
2019-03-08 · 知道合伙人教育行家
拥抱Linux
知道合伙人教育行家
采纳数:418 获赞数:2160
大学的校级奖学金,机械行业十年工作经验

向TA提问 私信TA
展开全部
  1. 竖线「|」是按位(或)运算符,具体的运算结果是「哪个位与1做按位或的运算,那个位就会变成1。」

  2. 回到你的提问里,语句「a |= 0x0002;」的右边是十六进制数,值是十进制里的2,它在内存里的二进制编码(补码)的最后一个字节是0000 0010,前面的3个字节都是0就不谈了。

  3. 那么根据上面第1点说的,具体运算是「哪个位与1做按位或的运算,那个位就会变成1」,那我们就来看看变量a是多少吧。假设a的值是1(十进制),它在内存里的二进制编码(补码)的最后一个字节就是0000 0001,同样,前面的3个字节都是0也不谈了,那么它与0x0002做按位或(|)运算的话,很明显嘛,它的最后一个字节的倒数第2个0就变成1了,而其它位不变,所以假如变量a的值是1的话,a |= 0x0002 的结果就是,a的值变成了 3,因为0000 0011就是十进制的3嘛。《内存里的二进制存储是没有空格的,这里每4位一个空格只是为了美观。》

  4. 那么同样的道理,对于语句「a |= 0x0001;」,变量 a 与 0x0001 做按位或运算,把结果再赋值给变量a,而0x0001在内存里的二进制编码的最后一个字节是0000 0001,也就是最后一位是1,所以语句的结果就是 a 的二进制编码的最后一位数变成1。 那么,假设a的值是1(十进制),它的二进制编码的最后一个字节是0000 0001,那么按位或运算之后和运算之前是一样的,还是1;假设a的值是4(十进制),它的二进制编码的最后一个字节是0000 0100,那么按位或运算后,就变成了0000 0101,转换回十进制就是5了,也就是a的值就变成5了。

如有帮助,烦请点采纳,谢谢!

来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式