首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:~是什么意思

Java:~是什么意思
EN

Stack Overflow用户
提问于 2009-09-27 12:35:17
回答 5查看 61.8K关注 0票数 82

在这段Java源代码中,我有下面这一行:

代码语言:javascript
复制
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....

波浪号~是什么意思?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-27 12:39:29

波浪号(~)执行Java语言中数值的逐位补码。

请参阅:Bitwise complement (~): inverts ones and zeroes in a number

票数 75
EN

Stack Overflow用户

发布于 2009-09-27 12:38:38

它是Unary ~ Bitwise complement运算符(引用):

  • 仅用于整数值
  • 反转比特,即0比特变为1比特,反之亦然~x

(-x)-1 \f25

  • -1\f6所有情况下都是-1\f25

-1\f6

另请参阅this page on Bitwise operators on wikipedia,其中说明:

逐位NOT或补码是一元运算,它对每一位执行逻辑求反,形成给定二进制值的1的补码。数字从0变为1,反之亦然。

例如:

代码语言:javascript
复制
NOT 0111  (decimal 7)
  = 1000  (decimal 8)

在许多编程语言(包括C系列中的编程语言)中,按位NOT运算符是"~“(代字号)。

票数 55
EN

Stack Overflow用户

发布于 2017-02-18 13:30:50

来自Java的网站http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

一元按位补码运算符"~“反转位模式;它可以应用于任何整数类型,使每个"0”都是"1“,每个"1”都是"0“。例如,一个字节包含8位;对位模式为"00000000“的值应用此运算符会将其模式更改为"11111111”。

现在,正如Pascal MARTIN之前回答的那样,在任何给定的情况下,该值都等于-(x)-1。例如~2=-3,~-6=5等。

此外,在java中,所有正整数被存储为它们的二进制表示,而负整数被存储在正整数的2的补值中。

现在,让我们看看在~2=-3的情况下它是如何在位级上工作的:

最初,2以其二进制表示形式存储:

代码语言:javascript
复制
0000 0000 0000 0010

现在~2将产生值(与位相反):

代码语言:javascript
复制
1111 1111 1111 1101

我怎么知道它是-3呢?好吧,它是-3,因为它是从3的2的互补表示中派生出来的。

我们知道2's(x)= 1's(x) +1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)

我们的目标是找到x

1's(x)= 2's(x) -1(基于前面的表达式)

因为我们的答案是在2的赞美中,

1's(x)= 1111 1111 1111 1101 - 0000 0000 0000 0001

1's (x)= 1111 1111 1111 1100 (如何减去-http://sandbox.mc.edu/~bennet/cs110/pm/sub.html)

因此,x= 1的取值(因为我们得到的答案表示x的取值为1)。

X= 0000 0000 0000 0011

因此,我们发现x是3,因此我们之前的~运算符1111 1111 1111 1101的结果是-3,写成2对3的互补。

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

https://stackoverflow.com/questions/1483504

复制
相关文章

相似问题

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