首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制非(~)运算符是如何工作的?

问二进制非(~)运算符是如何工作的?
EN

Stack Overflow用户
提问于 2016-11-25 09:31:37
回答 2查看 2.1K关注 0票数 3

我对编程很陌生,我一直在努力学习一些基本的二进制语言,但有一件事我还是不太明白。这是关于非操作员的规则。

让我说我不想计算这个:62&~29

代码语言:javascript
复制
62 = 111110
29 = 011101

据我所知,结果应该是:

代码语言:javascript
复制
100011 = 35

但是我从代码得到的结果是34。

所以我的问题是:最后一个值是怎么回事?为何不加到34呢?

希望有人能解释给我听。

祝您今天愉快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-25 09:36:57

~是不非运算符,它是按位补运算符。

它采用操作数的位模式,并将所有0位转换为1位,将所有1位转换为0位。

它对数值的影响将取决于您的实现使用的补码约定,以及用来表示该类型的位数。

在您的具体示例中,62&~29被计算为62&(~29),它是111110&(~011101),它是111110&a100010,111110&a100010是100010,111110&a100010是34。这里我是学究的,并且使用a来代替1位,所以位数等于你类型的宽度。

票数 3
EN

Stack Overflow用户

发布于 2016-11-25 09:41:06

代码语言:javascript
复制
29    --> 011101
not29 --> 100010 (turn 1s into 0 and vice-versa)

62       --> 111110
not29    --> 100010
62&not29 --> 100010 (1 if and only if both are 1, otherwise 0)

你怎么拿到35英镑的?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40801625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档