我正在尝试获取给定数字的第n位(从数字的二进制表示形式的end开始(从0开始)。
例如,假设我们有十进制数 7,想要获取第 0 位。所以 7 在二进制中是 111,第 0 位是 1。
假设我们有 9,即二进制的 1001,并且想要获取第二位。是0。
我脑子里有以下想法:所以对于第一个例子,我们取 111 & 001 = 001,其中不是零,所以答案是 1。
对于第二个例子,我们取 1001 & 0100 = 0000,是零,所以答案是 0。
所以基本上我们对数字和一个全零但在我们感兴趣的位置为 1 的数字进行 bitwise and 。
这个想法可以用C++代码高效实现吗?我不知道如何用代码写出除了我们感兴趣的位置之外全为零的数字。谢谢!
答案是:
int get_bit_n(int x, int n) {
return (x >> n) & 1;
}