gpt4 book ai didi

android - 按位运算符android

转载 作者:太空狗 更新时间:2023-10-29 16:41:14 26 4
gpt4 key购买 nike

我是位运算符的新手,我不知道它们有什么用,但我知道以下内容:

5 & 3 = 1

因为

0101  & 0011 = 0001

是的,我知道我们将每个位对相乘,例如 1 x 0 = 01 x 1 = 10 x 0 = 0

现在说到编码,我为 onTouchEvent 找到了以下代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction() & MotionEvent.ACTION_MASK;
switch(action) {
case MotionEvent.ACTION_DOWN : {
break;
}

case MotionEvent.ACTION_MOVE : {
break;
}

case MotionEvent.ACTION_POINTER_DOWN : {
break;
}

case MotionEvent.ACTION_POINTER_UP : {
break;
}

case MotionEvent.ACTION_UP : {
break;
}
}
return true;
}

Ok firstable,int action = event.getAction() & MotionEvent.ACTION_MASK;部分操作后action的值是多少,什么意思?为什么不直接使用 action = event.getAction() 这是什么意思。

其次,我从未见过使用 {}case 定义代码块:这是特定的,因为我们使用的是按位与运算符或者这是完全正常的事情,我碰巧注意到你可以使用它们?

最佳答案

事件被屏蔽的原因是为了从事件中删除不相关的位。使用 ACTION_MASK 执行按位与操作只会隔离那些特定的位。这就是组合和测试打包成整数的状态标志的方式。如果您没有屏蔽它,那么如果在该事件上设置了任何其他位,您将无法轻松地测试您的操作是否相等。

这实际上是为一个 Action 保留少量的位,比如有一个 3 位整数(或者它实际上是什么)。掩码仅设置相关位,以便丢弃所有其他位(不重要)。

至于 case 语句中的大括号,那很好。您几乎可以在任何地方放置大括号——它会创建一个 block 范围级别,您在该 block 内创建的任何新变量都将只存在于该 block 中。在 case 语句中,这是很正常的,并且可以防止一个 case 中的变量“落空”到后续情况。例如:

switch(foo)
{
case 0:
int i = 42;
// do something with i
break;

case 1:
// The variable i is still in scope here, which is often not
// intentional (but can sometimes be useful)
}

阻止 i 掉下去:

switch(foo)
{
case 0:
{
int i = 42;
// do something with i
}
break;

case 1:
// The variable i defined above is not available here.
}

在你的例子中,大括号是多余的,但可能是因为编写代码的人在他们的编码风格中采用了这种做法。很可能他们之前已经被不需要的副作用烧毁了,或者他们的编译器发出关于变量失败的警告并且他们决定一直使用大括号。就我个人而言,我认为只在必要时使用它们会更干净。

关于android - 按位运算符android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com