我应该如何访问C++类型(例如char
或其他类型)中的单个比特位?
N
:(INPUT >> N) & 1;
设置:INPUT |= 1 << N;
清除:INPUT &= ~(1 << N);
切换:INPUT ^= 1 << N;
N
的另一种定义应该很容易。 - Matt|
(或)、&
(与)和^
(异或)来设置它们。例如,要设置变量a
的第三位,您可以输入以下内容:a = a | 0x4
// c++ 14
a = a | 0b0100
这非常简单。 假设您需要访问整数的各个位。 创建一个掩码,如下所示: int mask =1; 现在,将您的数字与此掩码进行与操作,即可获得零位设置的值。 为了访问在第i个位置设置的位(索引从零开始),只需使用(mask<)进行与操作。
number&(1<<n)
。实际上,(1<<n)
基本上是2^n(因为您将1位左移...0001 n次,每次左移都意味着乘以2)
创建了一个数字,该数字在除了第n个位置以外的所有位置都是0
(这就是数学的工作原理)。然后,您将其与number
&
在一起。这返回一个数字,它在任何地方都是0
,或者具有某个位置上的1
(实质上是一个整数,要么为0,要么不为0)。例如:4中的第二位,4&(1<<2)
0100
& 0010
____
0000 = 0
2
位是0。