Java 在Android中如何组合整数常量?
我在Android中将一组常量组合在一起 例如,A=1,B=2,C=3 然后我使用一个名为setParams(a | B | C)的函数 Java将其转换为一个最终的int值,比如XJava 在Android中如何组合整数常量?,java,android,constants,Java,Android,Constants,我在Android中将一组常量组合在一起 例如,A=1,B=2,C=3 然后我使用一个名为setParams(a | B | C)的函数 Java将其转换为一个最终的int值,比如X 如果我只能访问整型常量的最终组合值,那么如何从组合值X中获取单个值 除非有特定的规则来管理分解,否则不能这样做 在您的情况下,由于C与A | B相同,您无法判断 但是,如果A、B和C分别为1、2和4(您能看到模式吗?),则可以使用位运算从X中提取成分。事实上,这样做是很常见的。除非有特定的规则来管理分解,否则不能这
如果我只能访问整型常量的最终组合值,那么如何从组合值X中获取单个值 除非有特定的规则来管理分解,否则不能这样做 在您的情况下,由于
C
与A | B
相同,您无法判断
但是,如果
A
、B
和C
分别为1、2和4(您能看到模式吗?),则可以使用位运算从X
中提取成分。事实上,这样做是很常见的。除非有特定的规则来管理分解,否则不能这样做
在您的情况下,由于C
与A | B
相同,您无法判断
但是,如果
A
、B
和C
分别为1、2和4(您能看到模式吗?),则可以使用位运算从X
中提取成分。事实上,这样做很常见。我想知道为什么认为java“必须”跟踪事物。为什么会这样
问题是:如果您在源代码中使用变量,那么这些变量当然在它们的范围内,比如:
void foo() {
int a=5, b=3;
int c = a * b;
do something else with a and b
return c;
当然,即使在计算了c之后,a和b仍然“存在”,并且可以检查它们的值。但一旦该方法返回,关于a、b和c的任何知识都将消失。那么唯一剩下的是该方法返回的int值15
(顺便说一句:在上面的例子中,编译器会进行常量折叠,在该方法的字节码中,你甚至找不到a、b、c了。我想知道为什么认为java“必须”跟踪事物。为什么会这样 问题是:如果您在源代码中使用变量,那么这些变量当然在它们的范围内,比如:
void foo() {
int a=5, b=3;
int c = a * b;
do something else with a and b
return c;
当然,即使在计算了c之后,a和b仍然“存在”,并且可以检查它们的值。但是一旦方法返回,关于a、b和c的任何知识都消失了。然后唯一“剩下”的就是方法返回的int值15
(顺便说一句:在上面的例子中,编译器会进行常量折叠,在该方法的字节码中,你甚至找不到a、b、c了。你能发布一些代码吗,如果你使用的是数学运算,你在这里做什么是非常不清楚的(你没有指定你在做什么)这是不可能的,因为数字有许多不同的可能性。例如:A*B的结果是2。A可以是1或2,但你永远不会知道sure@Michael因此,我假设Java有某种内部方式来识别组合值是什么,对吗?@Kyle是的,但那是不正确的。为什么你想用这种方法来解决这个问题吗?如果你显式地将变量传递给方法,为什么不把它存储在一个临时的局部变量中,以便以后可以访问它呢?你能发布一些代码吗?如果你在使用数学运算(你没有指定你在做什么),你在这里做什么是非常不清楚的这是不可能的,因为数字有许多不同的可能性。例如:A*B的结果是2。A可以是1或2,但你永远不会知道sure@Michael因此,我假设Java有某种内部方式来识别组合值是什么,对吗?@Kyle是的,但那是不正确的。为什么你想用这种方法来解决这个问题吗?如果你显式地将变量传递给方法,为什么不把它存储在一个临时的局部变量中,以便以后可以访问它呢?你的意思是只有Java知道它是如何组合的,但我们不知道组合的int常量的组成是什么?@Kyle:当然。@Bathsheba它仍然不可能我们无法确定结果是如何产生的。例如,给定A=1,B=2,C=4,那么A | B | C是7。所以现在我们要问:给定一个由X | Y | Z产生的值7,X,Y和Z是什么?一个可能的答案是(1,2,4),但是(1,1,6)也可能是答案。@FredK,确实是这样。但是如果你知道成分的值(部分“特定规则”),它们是“按位排他的”(如果你明白我的意思的话),然后你可以推断成分。这是因为线性代数太多,编程太少,所以你的意思是只有Java知道它是如何组合的,但我们不知道组合的int常量的组合是什么?@Kyle:绝对。@Bathsheba仍然无法确定结果是如何创建的。例如,给定A=1,B=2,C=4,那么A | B | C就是7。现在我们问:给定一个由X | Y | Z创建的值7,X、Y和Z是什么?一个可能的答案是(1,2,4),但是(1,1,6)也可能是答案。@FredK,确实是这样。但是如果你知道成分的值(“特定规则”的一部分),它们是“按位排他”(如果你明白我的意思的话),然后你就可以推导出成分。这是对线性代数太多而编程太少了