如何确定十进制数的最后一位是否为 1,给定任意数字,例如 21、81、35、123,仅使用基本位运算符?
我的目标是更熟悉位操作,例如xor
,and
以及移位。
我面临的问题是,即使某些数字不以小数位结尾,也会设置最低有效位one
,否则最后一位数字可以用这样的掩码确定:
>>> '{0:08b}'.format( 5 & 1)
'00000001'
>>> '{0:08b}'.format( 500231 & 1)
'00000001'
显然,我有点困惑,想要一些关于如何解决这个问题的指示。示例代码使用 Python,但建议和可能的答案可以使用任何语言,包括自然英语。
到目前为止我已经尝试过:
>>> def go():
... for i in [35,123,01,11,21,31,41,51,61,71,81,91,101]:
endswith1(i)
def endswith1(code):
# ...
# xxxxx
# & 00111
# ^ 00001
# 00000
filter = code & 7
isone = filter ^ 1
a = 'and 7: {0:08b}'.format( filter)
x = 'xor 1: {0:08b}'.format( isone )
b = '{0:08b}'.format( code)
one = isone == 0
print '%3d:%s %12s %12s %s' %( code,b, a,x, one)
#return ((code & 7) ^ 1 ) == 0
>>> go()
35:00100011 and 7: 00000011 xor 1: 00000010 False
123:01111011 and 7: 00000011 xor 1: 00000010 False
1:00000001 and 7: 00000001 xor 1: 00000000 True
11:00001011 and 7: 00000011 xor 1: 00000010 False
21:00010101 and 7: 00000101 xor 1: 00000100 False
31:00011111 and 7: 00000111 xor 1: 00000110 False
41:00101001 and 7: 00000001 xor 1: 00000000 True
51:00110011 and 7: 00000011 xor 1: 00000010 False
61:00111101 and 7: 00000101 xor 1: 00000100 False
71:01000111 and 7: 00000111 xor 1: 00000110 False
81:01010001 and 7: 00000001 xor 1: 00000000 True
91:01011011 and 7: 00000011 xor 1: 00000010 False
101:01100101 and 7: 00000101 xor 1: 00000100 False