数量可按以下方式表示:
3 = 000011
5 = 000101
10 = 001010
......etc. I m将假设你重新熟悉双亲。
确切数字和手段是得出两个数字,彼此相上下,并产生一个新数字,其中两个数字都有一个(其他数字为0)。
例如:
3 => 00011
& 5 => 00101
------ -------
1 00001
比特维权意味着要增加两个数字,相互接手,并增加一个数字,其中任何一个数字都有一个(其他数字为0)。
例如:
3 => 00011
| 5 => 00101
------ -------
7 00111
比特维兹XOR(独占物权)是指接收两个数字,相互接手,并产生一个新数字,其中任何一个数字都有1个,而另一个数字则有0个(其他数字为0个)。
例如:
3 => 00011
^ 5 => 00101
------ -------
6 00110
比特维德的挪威(Not OR)意味着要吸收两个数字的比比特,然后扭转一切(如果有0,现在就有一个1,现在只有0)。
比特维德(Not and)指带双向和两个数字,然后扭转所有情况(如果有0,现在有1,现在只有0)。
延续性:为什么<代码>序号”;=15除4个最右边的轨道外,都设定了所有轨道? 你们现在应该能够看到这一点。
n => abcdefghjikl
& 15 => 000000001111
------ --------------
? 00000000jikl
(0 and a = 0
, 0 and b = 0
, ......j and 1 = j
, i and 1 = i
, ......
How is this useful? In many languages, we use things called "bitmasks". A bitmask is essentially a number that represents a whole bunch of smaller numbers combined together. We can combine numbers together using OR, and pull them apart using AND. 例如:
int MagicMap = 1;
int MagicWand = 2;
int MagicHat = 4;
如果我只有地图和帽子,我可以表示,作为<条码>,MyInventoryBitmask = (MagicMapcode /magHat>,结果是我的比照数。 如果我没有任何东西,那么我的手法是零。 如果我想看一下我是否怀着我的 w,那么我可以做到:
int hasWand = (myInventoryBitmask & MagicWand);
if (hasWand > 0) {
printf("I have a wand
");
} else {
printf("I don t have a wand
");
}
如何?
EDIT:更多 st
你们的伤口也穿过“临时”操作器:和带;及“和”;和 这只是指“一切照旧”或“一切权宜之计”。
换言之:
1 << 3
=0001 << 3
=0001000
而且:
8 >> 2
= 01000 >> 2
010