Java 位操作修改位以包括数字
我正在准备面试,几个小时来我一直在努力理解这个问题: 给你两个32位的数字N和M,还有两个位的位置i 和j。编写一种方法,将N中i和j之间的所有位设置为M (例如,M成为位于i且从j开始的N的子串) 有人能给出一个完整的例子,并详细说明实际需要什么吗?我需要设置i和j之间的值来形成M的值,还是实际设置M中的位 是否有一些关于bits操作的好教程来解释这些概念Java 位操作修改位以包括数字,java,bit-manipulation,bit,bit-shift,Java,Bit Manipulation,Bit,Bit Shift,我正在准备面试,几个小时来我一直在努力理解这个问题: 给你两个32位的数字N和M,还有两个位的位置i 和j。编写一种方法,将N中i和j之间的所有位设置为M (例如,M成为位于i且从j开始的N的子串) 有人能给出一个完整的例子,并详细说明实际需要什么吗?我需要设置i和j之间的值来形成M的值,还是实际设置M中的位 是否有一些关于bits操作的好教程来解释这些概念 谢谢大家! 假设这2个32位数字是:- M = "00010101010101010101010101010101"; N = "1010
谢谢大家! 假设这2个32位数字是:-
M = "00010101010101010101010101010101";
N = "10101010100001010101100101011111";
i = 13;
j = 23;
他们只是想让N的第13到23位与M的相同
我从右手边数位置
23rd bit 13th bit
所以,这里,M是第13到23个字符=“00001010\uuuuuuuuuuuu10101001\uuuuuuuuuuu101010101”
因此,N必须是101010101___10101010101____100101011111
或N=101010101“10101010101”100101011111
可以使用“”
- 使用逐位或递增方式为位置i到j创建掩码,并将每个位设置为1
- 使用掩码的按位和按位NOT清空N中的位
- 使用带按位AND的掩码从M中选择位
- 使用按位或按位复制中的位
int n = 0x12345678;
int m = 0x55555555;
int i = 4; // assume right to left
int j = 15;
int mask = 0;
for (int pos = i; pos <= j; pos++) {
mask = mask | (1 << pos);
}
System.out.println(String.format("mask is 0x%08x", mask));
int nCleared = n & ~mask;
System.out.println(String.format("clear n 0x%08x", nCleared));
int bitsFromM = (m & mask);
System.out.println(String.format("Bits from m 0x%08x", bitsFromM));
int nWithM = bitsFromM | nCleared;
System.out.println(String.format("n with m 0x%08x", nWithM));
这是一个措辞糟糕得令人惊讶的问题。对不起,我还是Stackoverflow的初学者!我不是指你的问题——我是指给你的问题。你的比他们的好得多!我的回答涵盖了你想知道的一切吗?是的,非常感谢!
int n = 0x12345678;
int m = 0x55555555;
int i = 4; // assume right to left
int j = 15;
int mask = 0;
for (int pos = i; pos <= j; pos++) {
mask = mask | (1 << pos);
}
System.out.println(String.format("mask is 0x%08x", mask));
int nCleared = n & ~mask;
System.out.println(String.format("clear n 0x%08x", nCleared));
int bitsFromM = (m & mask);
System.out.println(String.format("Bits from m 0x%08x", bitsFromM));
int nWithM = bitsFromM | nCleared;
System.out.println(String.format("n with m 0x%08x", nWithM));
mask is 0x0000fff0
clear n 0x12340008
Bits from m 0x00005550
n with m 0x12345558