二元方程
Binary equation
我有一个任务:
0x430 = ((0x0f0f)^x) << 4) & 0xc35
十进制:
1072 = ((3855^x)<<4 & 3125)
和二进制:
10000110000 = (111100001111^x)<<4 & 110000110101
所以第一步应该是 110000110101
到左边。我应该使用 or
而不是 and
(&)?
&
操作,假设您指的是按位与,是一种丢失信息的操作。与 0“与”的位中包含的所有信息都将丢失。这就像与 0 相乘。与 0 相乘没有等效的“逆”运算,如果将其应用于等式两边,则在右侧将其删除并在左侧进行一些更改。
所以我认为你的双方等价操作的方法在这里不适用。
因此,我建议为那些因与 0 相加而丢失的位引入不同的表示。例如"#".
这会导致
10000110000 = (111100001111^x)<<4 & 110000110101
=>
1####11#0#0 = (111100001111^x)<<4
即你只能确定未知“x”的一些位。
所以以下不是最聪明但可行的解决方案:
public class Main {
public static void main(String[] args){
for (int i = 0; i < Integer.MAX_VALUE; i++){
if((((3855^i) << 4) & 3125) == 1072){
System.out.println("Found: " + i);
break;
}
}
}
}
/*
checking:
left side:
((111100001111 ^ 1000000) << 4) & 110000110101
111100001111
XOR 000001000000
111101001111
111101001111 << 4 = 1111010011110000
1111010011110000
AND 0000110000110101
0000010000110000
right side: 10000110000
right: 0000010000110000
left: 10000110000
*/
正如我们所见,64
是第一个大于 0
的整数,它求解了这个方程。当然还有更多的作品。
我有一个任务:
0x430 = ((0x0f0f)^x) << 4) & 0xc35
十进制:
1072 = ((3855^x)<<4 & 3125)
和二进制:
10000110000 = (111100001111^x)<<4 & 110000110101
所以第一步应该是 110000110101
到左边。我应该使用 or
而不是 and
(&)?
&
操作,假设您指的是按位与,是一种丢失信息的操作。与 0“与”的位中包含的所有信息都将丢失。这就像与 0 相乘。与 0 相乘没有等效的“逆”运算,如果将其应用于等式两边,则在右侧将其删除并在左侧进行一些更改。
所以我认为你的双方等价操作的方法在这里不适用。
因此,我建议为那些因与 0 相加而丢失的位引入不同的表示。例如"#".
这会导致
10000110000 = (111100001111^x)<<4 & 110000110101
=>
1####11#0#0 = (111100001111^x)<<4
即你只能确定未知“x”的一些位。
所以以下不是最聪明但可行的解决方案:
public class Main {
public static void main(String[] args){
for (int i = 0; i < Integer.MAX_VALUE; i++){
if((((3855^i) << 4) & 3125) == 1072){
System.out.println("Found: " + i);
break;
}
}
}
}
/*
checking:
left side:
((111100001111 ^ 1000000) << 4) & 110000110101
111100001111
XOR 000001000000
111101001111
111101001111 << 4 = 1111010011110000
1111010011110000
AND 0000110000110101
0000010000110000
right side: 10000110000
right: 0000010000110000
left: 10000110000
*/
正如我们所见,64
是第一个大于 0
的整数,它求解了这个方程。当然还有更多的作品。