T.J*_*der 129
考虑"偶数"和"奇数"在"位"术语中的含义.由于二进制整数数据以表示2的倍数的位存储,因此最低位对应于2 0,当然为1,而所有其他位将对应于2的倍数(2 1 = 2,2 2) = 4等).Gratuituous ASCII艺术:
NNNNNNNN
||||||||
|||||||+?? bit 0, value = 1 (20)
||||||+??? bit 1, value = 2 (21)
|||||+???? bit 2, value = 4 (22)
||||+????? bit 3, value = 8 (23)
|||+?????? bit 4, value = 16 (24)
||+??????? bit 5, value = 32 (25)
|+???????? bit 6, value = 64 (26)
+????????? bit 7 (highest order bit), value = 128 (27) for unsigned numbers,
value = -128 (-27) for signed numbers (2's complement)
我只在那里显示了8位,但你明白了.
因此,您可以通过仅查看最低位来判断整数是偶数还是奇数:如果已设置,则数字为奇数.如果不是,那就是偶数.你不关心其他位,因为它们都表示2的倍数,所以它们不能使值奇数.
的方式,你看该位是通过使用你的语言的AND运算符.在C语言和许多其他语言中,语法派生自B(是的,B),该运算符是&.在BASIC中,它通常是And.取整数,它取1(这是一个只设置最低位的数字),如果结果不等于0,则设置该位.
我故意不在这里给出代码,不仅因为我不知道你正在使用什么语言,而是因为你标记了"家庭作业"这个问题.:-)
T M*_*T M 20
if (number & 1)
number is odd
else // (number & 1) == 0
number is even
Run Code Online (Sandbox Code Playgroud)
例如,让我们取整数25,这是奇数.二进制25是00011001.请注意,最低有效位b0为1.
Run Code Online (Sandbox Code Playgroud)00011001 00000001 (00000001 is 1 in binary) & -------- 00000001
neo*_*pir 12
只是吉姆回答的一个脚注.
在C#中,与C不同,按位AND返回结果数,因此您需要编写:
if ((number & 1) == 1) {
// It's odd
}
Run Code Online (Sandbox Code Playgroud)
if(x & 1) // '&' is a bit-wise AND operator
printf("%d is ODD\n", x);
else
printf("%d is EVEN\n", x);
Run Code Online (Sandbox Code Playgroud)
例子:
For 9:
9 -> 1 0 0 1
1 -> & 0 0 0 1
-------------------
result-> 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
所以9 AND 1给出了1,因为每个奇数的最右边是1.
For 14:
14 -> 1 1 1 0
1 -> & 0 0 0 1
------------------
result-> 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
所以14 AND 1给出0,因为每个偶数的最右边是0.