Count the number of ones in an unsigned 16-bit integer
80386 Machine Code, 4 bytes
F3 0F B8 C1
which takes the integer in cx
and outputs the count in ax
, and is equivalent to:
popcnt ax, cx ; F3 0F B8 C1
And here is an 11 10 byte solution not using POPCNT:
31 C0 D1 E9 10 E0 85 C9 75 F8
which is equivalent to:
xor ax, ax ; 31 C0 Set ax to 0
shr cx, 1 ; D1 E9 Shift cx to the right by 1 (cx >> 1)
adc al, ah ; 10 E0 al += (ah = 0) + (cf = rightmost bit before shifting)
test cx, cx ; 85 C9 Check if cx == 0
jnz $-6 ; 75 F8 Jump up to shr cx, 1 if not
Python 2, 17 bytes
bin(s).count('1')
The bin
built-in returns the integer converted to a binary string. We then count the 1
digits:
>>> s=1337
>>> bin(s)
'0b10100111001'
>>> bin(s).count('1')
6
J (5 characters)
J has no explicit types. This does the right thing for all integers.
+/@#:
+/
the sum@
of#:
the base two representation