the art of computer programming - bitwise tricks and techniques

122

Upload: api-3697475

Post on 16-Nov-2014

248 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: The Art of Computer Programming - Bitwise Tricks and Techniques

�����

��� ��� ��

������ ����� ��

������ � ���� ����� ��

� ����� �� ���� �� ������

� �� �� �� ��� ��� ����� ����

������ �� ��� �������� ���� ��

��������������

Page 2: The Art of Computer Programming - Bitwise Tricks and Techniques

��������� �� �����������

�������� ���� ��������� ����������� ������������������������� ������ ����� ��������� �� � ���� �� ��� ������� ����

��� ��� ��������� ����������� ����������������������� �� ����������� � ��� ������ �� ������ ��� ���� ���������� ������� �� ������� ������� ������ ��� �� ���� � ��� �������� �� ������� ��

��� ��� ��������� ����������� ��������������������������� �� ����������� ������� � ��� ���� ��� ���� �� ����

�������� � ��� �� !�����"#�����

!�� ������ �����$��� % ���� � ���� � ������� ��� �� ����� ��� ����� �� � ������$��������� � ������������ �� ��� ���� � �� ��� ������ �������� ��������� ���������� �������� � ��������� ���� � ��� ���� ����� � ��� � �������� ��������� ��� ��� ������� &�� ��� �� ��� � ����� ������ ���� �� ������� '���������( ���

)���� �������� '��$���� �(� �* !���� ����

Page 3: The Art of Computer Programming - Bitwise Tricks and Techniques

��������������� �� �������

�������

����� ��������� ����� ���

����� � ��� � ��� �� ��������� �� ���� � �� �� ���

� �� ������ � �� ��������� ���� ���� ��� ������� ��� �������� �� � ��������

� ���� ���� �� � ��� ����� � �� ������� � �������

� ��� �� ��� � �� � �� �� � ����

� �� � � �� ��������� ���� ��� ��������� �� ������� �� �� ���� ���� ����

� ������ �� � �� ������ � � �� ������� ��� ��� ���� � ������� �� ���

��� �� ���������� � ����� ������� � �� �� ��� �� � �����

� �������� ����� ��� ��� ��� !������� ��

����� "������ #������� � ����

���� ����� �������� ��� ������ ���� ��� ���� ����� �� ������ �� ����� �� �� ����� ���� ���� ��� �� � ����� ��� ���� �������� ��� ���� ������� ���� ���� � ��� ��� � �� � ��� ������� ������� �� �� ��� ������� ���������� ����� ����� ����� ��� ����� ���� ��� ��� � ������ � ������� ���� ���� ��� ��� ������ � ��� ����� ������ ������� ���� ������ ������ ��� ���� ������ �� ������� � �� ��� ���������� � �� ���� � !� ��� "��� �� ��� ���� � ���� ��� ��������� #�� ����� ���� �$������� �� ������ ��� ��� �����%���� � ���� �� ������� ��������� � ���������

&���� ���� ������� � ���� ���� �� ��� ���� ���� �� ��� �� �� ������������ �������� ���� ��� �� �� ���������� �� ������ ��� ������ ���� ��� ��� �� �� ���� ��� ���� ���� ���������� ��� ������������� �� � �� �� �����'�� ��� �� � �� ����( � ������ ���� �� ���� �������� �� ������ �� ��� ������ ��� �� )� � ��� ��� �� �� �� ���� ����� ��� ����������� ���� ��� ��������

�� ��� ��� ������ �� �������� ���� ��$����� � �������� )������ *� �" � � ���� ��� ������ �� ����������� � �������� +����� * �� ������� � � �� ���� ���� �� ���� ,���� � �� ���� -#� -'� ��� -+.� �������� ���� ����� � �� ����� ��� ���� �� �� ����� ���� � ���� ����� � ���� ������ ������������ �� ���� ���� ����� � ���������� ����� �� ��� )����� &���'������ ����� � �� �� ������ ���� ����� ��� ���� ����� )������ *� / 0������ 1���� ��������� ���� ����� ������ ����� '�� ��� ��������� �� )������*� � ��� '�� ��� ��� ������ �� )������ *� �!� )������ *� �"� ����� ����� ������� ��� ���� ��� ��� ����� ����� �� ���� ������� ������ �� ���� )������*� �- �� ���� ������� ��� ������������ � '�� ��� ���������

��� ���� ���� *�!� �� ����� ��������� � ������� ������ ��� �� ������ ����)������ *�!� / &�������� '���� +���������� 2������� 3����� �� � ���� ����������� � ���� ������� �� ��� 4�� ����� �� ����� )������ *�!�! �� ��� ��������������� �� ����� � #�� �� �� �� ��������� � � ���� �� ( �� ��� ��� �

���

Page 4: The Art of Computer Programming - Bitwise Tricks and Techniques

�� �������

���������

��� ����� +����� * �� ����� � ��������� ������ �� ��� ����� ������� ������ ����� �� ���� ���

���� ��� � ��� ��� �� ������ �������� ��� ����� � ���� ��� ���� ���� ���� ��� ���� �� �� ������� ���� ����� ��� ���� "5 ���� �� ������������ � )������ *� �"( ��� � ��� �� � �� ������ � ����� ������� ���������� ����� ������ �����

6��� � �� ��� - �� ��� ���� ������� ��������� ��� ���� �� �� ��� �� �� ���� �� ��� ���� ����� � ��������� ������� �������� �� ���� 7"���� � ���� ��� � ���� ���� � ��� �������� ����� ����� ��������� �� ���� ��� � '�� )������ *� �" �� � ����� � ���������/ 8�� �� ���� ���� �� ��� ������ �� �� � ��� ��������

������ � ����� � �������� ���� ����� ������ ��� �� ���� ��� ��$���� � ��� ���� �������� ��� ����� �� �� ��� 3����� � � �� ��� �� � ���������� ��� ������� ����� ��� ������%��� �������� ���� +���$��������� )������� �"� 9 ��� �"�!9 �� ��� ������ ���� �� �� �� ���� ����� �� ����������� ��� ����� ���� ������$���$������ ����� ��� � �"� 97 � �� ��� ��� ����� ���� �� � ������������ ������� ���� � ��� � #)+�� ������

��� ����� � '�� ��� �������� ��� ��� ������ ����� ��� � ����� �� ����$����� �� ���� � ���� �� ����������� ��� ����� ���:��� � ������� �����$����� ��� �� ��� � ���� ����� � �� �� ���� �� �������� ���� ����� �� ��� ����� ��� �� �������� �� ����� �� ��� ���� ���������� ������������� #������ ����� ������� � �� � ������� ��� ��� �� �� �������� � ���� ���� ��� �������� �� �������� �!�-� �!�;� �!�<� !�"� � !�"�"� !�"�-�!� !�"�;� "� � "�!�!� -� � -�-�-�;�"� -�;�-� -�=� � -�=�!� -�=�"� -�=�-� ;� ;�!�!� ;�!�"� ;�!�;� ��� ;�"�- � ��� ������� �� ����� � ����� � �� ���� �� ��� ���� �� � �� ���������� �� � ������������� '�� ��� ������ ���� ��� ������� � ���� � �� �� �� � �� �� ���������� ���� �� ���� � ��� ������ )������ *� �" �������� �� ���� �� ����������������� � �����/ #�� ������ ��� ��������� � ��� ���������� �� ���$���� ���� � ��� ���� �� ���� ! ��������� ���� ������>�� ���� �� � ���> ���� �� � ������� %���� � �� � ��� ���������� ������ ���� ������ �� �� � ���

6� ����� �� ����������� � ������� ���� ���� ������ ����� � ������� ��� ����� �� � �� ���� �� ����� ������� �� ���� ���� �� ���� ������� ��� ������ 2 ���� ���� � ����� �� �� ��� �������� ���� ���� � ����� �������� ��� ��� ,���� ���� ���� �� ��� -= � �����.� ���� � �������� = �*=� !� *� !=� !<� !?� "5� ��� *-( ���� � �� ��� ���� � ��������� � �������������� ���� ��� %�������� �� ��� ������ �� �������� ! � -5� - � ;=� ��� =;� #� ����� ��� ��� ��� ����@ 2 ���� ���� �� � ��� ���� � � �� ������� ��� � ����� ��������� %��������� #�� � ����� � �� �� ����� �� ����� �������� ��� �� ���� ������ �� ��� � ���� �� ��� ����� � ���� ���� �� �� �����

� ����� � ���� ��� �� � � �� ���� ������ �� ���� �������� ���� � ���� ���� � ��� ������� ���� ������ � � ������ � ����� ��� �� ������ ����� � ���������� ���� � ���� ���� ��� ����� �� ������ ��� ���� � ����� ��� �� �� %��������� A����B ���� ��� :��� ������� �� �� A� ������B ������ � ���� �� �� � ��� ���� ��� ������� �� �� �������� ���� ������ �� ��� ����� ���� ���������� ;� =� !5� !=� "-� "?� -?� ;5� ;"� ;*� ;<,���.� ;?� =5� *!� *<� <5� < � <!� <"�

Page 5: The Art of Computer Programming - Bitwise Tricks and Techniques

������� �

������������������������������� ��

�������� �����!���� �������!�"���# �������

�������� � $� �!���� ����������%!����������� ��&��������'����!�( �����������������

<-� <=� ?5� ?;� 5� ;� =� !5� ! � !*� -=� ;-� ;;� ;?� =<� <"� ?"� ��� ?<� ����� ��� ������ �� �������� *� <� ��� "?� 3������� ���� ��������������� -; ��� ;- �� ����� ����� ��� � ��� C������ ��� '� &����� 8�������� � ����� ��� �� ��� ������� �� ����� �� ��� ���� ����@

� ��� ����� � ��� � ������ �� � D!�;= � ���� �� �� ���� ��� ���� �� ����� ������ �� ��� ������ ���� �� �� ����������� � �������� � � �������� ���� ���� ���� �� �� � ����� ���� � ���� �� ��� �� ��� ������ #�� �� ��� ������������ � ����������� �� ��� ���� �� ���� "!�� ����� ,3�������� ���� ��� � ����� �� ����� �� �� �������� �� ����� � ���� ��� ���� ������ � �� ������� � ��� ������ �� ��� ������ ��� ���� �� ��� ������� ����/�.

+��� ������� �� ���$�������� ������ ��������� ����� �� E55�( ������������ � �� �� �� � � ����� �� � ��� ����� ������ �� �� ���� ��� ����

8���� ������F

��������� �������� G� H� I��� �������� ����

$����� ���������% �� �������� �� ����� ���������� ���������

����� � �� ���������� �� �� �������� ���� �� ������

"��� � ���� ����� �� � �������� �� ����� ��������� �� ��� ��� ����

� ��� ���� �������� &�� �� ������� �� ������� �������� �� �������

� �� �� ����� ��� �� ����� '() ���������� �� #������ � ����

' ���� ��*�� �� ������� ��� ������ ���������

� ������� �*����� �� ��� ���� ��������

� �� �� �� �� � ����

� ���� �� ��������� )���� ��� �� �� )������ *� �" ��� ��� �������� ������� ��� ������ ������� ,��� ��:���� �������. ���� �� ��������� ��������� � ��)������ *� � � 1��� ��� �� ��� ��� �������� � �� �� � ��� ����� �������,��� ���$����� � �������� ����������.� ����� ��� ������ �� )������ �"� 9�8��������� ��������� �� ������� �� � ���� ����/ �� ����� , !".)*� � ����� ����� ���� ��������� ���� ��� �� ����� ��� � ���� ��� �� ��� ����� ��J�������� �� ��� ��� � �� ���� � !� � "� ����� ��� ������ ���� AJ�������B�� ��� ����� �� ��� ������ ���� ��� 1 ����� �� ��� - �� ���� ��� ���������� ��� ����� �� J���������

Page 6: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� ��������

��#!�+���(��������(+��!�����,��&��-��.

���! ��"#$%�&� +���, ��-� ���� � ����,

%" %'#�� ' ����� ��� (������� ��

�� ������ ���� ���� ������ ������

� ������ ���(��� .��� /���� �)* +� )&�& � ��+�

�� ��� ������� ����� ��� ���������

J�� ����� ��� �� ���/ 4� ��� �� ��� '�� ��� ��������� �� �� �������2��� � �� ��� ��� �� ���� ��������� ��������� ��� ��������� ������$

����� ��� �� ��� ������� ���� ���� �� ���� ������� ��������� ���� �� A����BA��� �����$��B ��� �� ��� ������� ��������� ��� � ��� ��� ������� '�� �� �� ��� ���� '�� ��� ��������� �� ����� ������ ������ �� �� ���� ����� ������������� ������ �� �������� ��������� � ���� ���� ��������� ��� ����

H� � ������� �������� ������� � ��� ������� ��������� �� ���� ���$����� ����� � ������� ���� ����������� ��� � �� ��� ���� �� � ���������������� � ���� � ��� '���� ���� ������ �� �� �������� � ���� � � ������

Page 7: The Art of Computer Programming - Bitwise Tricks and Techniques

! ���������� �������� ����� *� �"

�/��� ��!�����((�����+ � &��-�� �����������0,������ ,�� � ��!�����/��1������0�������,�� �� ��!��� 2,������3�����4���� �5����� ,��#���-�#� ��������!��� ��0��6���� )��������� 7��� �����8����6���%������� ��!&��-�9� ��!�(!�� ��������:%���� ���0���!��! ��!

�� � � �� ��� �������� ��� ������ � ������� 3� ����� �� ��� HG)#+ ���$����� ���� ���� �� ?-?� ��� ���� � A�� ���B ������� ���� �������� � ��$���� ��� �������� �� �K,�L�.� ���� � ��� ��� ������ ���� � ��� ��� �� $��� �� ������� ��� � ��� � �������� ��� �� �����( �� ��� ���� � �������������� ��� 6�������� 6�� � �������� ��� � �� ����� ��� ���� ����� ��� ������� �� � ������� !%+� ��� � �� ,- ��� .,-� 4��� # �� ����� ���� ��� ������������ ����� �� ?;5� �� ������ ���� ������� %,/ ��� �� ���������� ����� .,- ,������� E ���. �� ����������� ���� � �� � �� C� #� '�������� �������� ������� ����� �� ?;! ���� ��� 6�� �� ������� ��� �������������� ������ ���� ���� ,- ��� � �� ���� A�� ���� �M � ����� ������� ���� ��� ���� ���������� ����� ���������B '� ���� ���� ��� 6�� ��� �������� �� ������ ��� �������� � ��� 3����� 6����� ��� � �� ��%���� �������������� � �������� �������� ��� � ��� �������� � ��� ���� ���������� �

I���� ����� ��� ����� �� ������ ��� ������� � !%+ ��� ,- �� ?;-������ ��� �����%���� � ���� ��������� �%���� � ,��� ������� <;.� #�� ��$��� ��� ������� �������� �������� ���� ����� � ��������� ���� ���������������� ��� �� ���N��� � ���� � 6��� � ����� ����� ���� ������� ��� ���� � � ��( ��� ���� �� ��� ��� �� ���� ��������� � ���� ��� ���� ������

# ���� �� � � ��� ���� ���� ��� �� ���� ����� ��� � � ������ � �� � �������� ��� �� ���� �� ���� ������ 4� �� ��� �� ���� ������� ���� ����� ���� ����� �� ����� � ���� ������%����

����� ���������� O���� ����� �� ���� � ������� ������� ��������� ��������� �� ����� � � P , � � � �:�)�;.:� � P , � � � �:�)�;.:� ��� � P , � � � �:�)�;.:�� ����� ��������� �� ����

�L � P � �� �� �� P ��� � � � 5( ,�.

� � � P � �� �� � �� P ��� � � � 5( ,�.

�� � P � �� �� � �� P ��� � � � 5� ,.

,�� ��� � �� �������� �� ���� E��� ������� � �L�� ��� E���� ������� � ���( ������� �� ����� ������N����� ��� ��� ��� ��� �� ����� �� ����� ��� ���������� � ��� � � � � ���,�� �. ��� ���,�� �.� ��������� ��. ����� � ����� ��

; L P � ; � P ;� ��� ;� P -�

����� ; P ,5 5 .:� P , 5 .:� P ,555 .:� ; P , .:� ��� - P , 5.:�J������� ������� �� �� �� ������� � �� ���� ���������� �� �������$�������������� �� ����� ���� ����� ��������� ������ ������� � ���� � �� ��� ��( ������ �� �; �� , � � � 5 .:� )��� �������$�������� ������ �� � ������ ����� !$���� �������� ����� �� ��������� �� ������� -� 7" � ��� �� ��� ��� �������L� �� � ���� ����� ����� ���� ���� �� ��� ��� �� ������ !$���� �������

6������������� ���� ���� ���� ���� ��������� �� ��� �������� � L ��� ��� ��������� �� �������� '�� ��� ���� ��������� �� ��� � ������ � �������������� �� �������� � ������� ������� �� ��� ���� � ��� ,��� �������� <7 =.�3� ���� ����� ��� ��� ���� ���� �� �� ��� A��� ���B � ��� ������� � ��� ��

Page 8: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� "

��!!�����7 (�-����������7 (�-������&���7 (�-��&������� (�-���!�(!���������������< ��0�������&������������������ � &���#

# ���� � ��� ����� ������� ��������� ��� ��� �� ���� ���� ���� ��������� 3� ����� �� ���� � ����� ������� � �� ��� � ���� �� ������� ��)������ *� � �� ���������� � �������� �� L� �� ��� � �� �������� ����� ��� � �$���� �� �� �� ���� ��� ��������� 4� ����� �� �� ���� ��� ���� ���������� ���/

�L � P � L �� � � � P � � �� �� � P � � �( ,.

,�L�.L� P �L,�L�.� ,� ��. � � P � � ,� � �.� ,���.�� P ��,���.( ,�.

,� � �. L � P ,�L �. � ,� L �.� ,�L �. � � P ,� � �. L ,� � �.( ,�.

,�� �. L � P ,�L �.� ,� L �.( , .

,�L �. � � P �� ,� � �. L � P �( ,�.

,�L �.� ,� � �. P �� �( ,�.

�L 5 P 5� � � 5 P �� �� 5 P �( ,��.

�L � P �� � � � P �� �� � P 5( ,��.

�L� P �� � � � P � � ��� P Q�( ,��.

�L Q� P 5� � � Q� P � � �� Q� P � ( ,�.

�L � P Q� � Q�� � � � P Q�L Q�� �� � P Q�� � P �� Q�� ,�.

��� �������� Q� �� ,��.� ,�.� ��� ,�. ������ � ������� ���!���������� � ������ � , � � � Q�:Q�)Q�;.:� � �� ������ �� J����� ���� ,��. ��� ,�. ����� %������� ���� �� *� � 7,��. ��� *� � 7,��.( �� ���� ��� ��� � P , � � � .: �������� P , � � � 555 .: �� ��� �� ���� ��� ��� �� ������� ������

4� ��� ���� � �� �������� � �� ������ � � � � � � �� � ��� ��������� ���� � � ��� � ������ �� � �� � � � 5� ����

� � � �� �L � P � �� � � � P � �� �L Q� P 5� ,��.

1 ����� �� ������� ��� ������� ��������� �� � �� ���������� ���� ��������( �� ��� ������� ���� ���� � ��� ������ ��������� � ���������� 3������ �� �� ��� � ����� �K � P , � � � .: P � �� ��� ������ ��� ��� �

�� P �K � ,��.

����� ���� ��� �� �� ������ � ��������� C�� ����� � �� �� ����� � ��

�� P �� ( ,� .

��� �� ����� �� ��� ����� ���������� �� ���� ���������� ��� ��������/

�� � P �K �� ,��.

4� ���� ���� �� ���� ����� ������ �� ��� �� � ����� ����� ����������� �%���� ��� �� �� ��� ������� ��� �������� �� ����� � !� ��� �� �� ������������ ���� ������ ��������� � ����/

�� � P � ������ �� � ���� P �!���( ,��.

�� � P � ������ ���� � ���� P �!����� ,��.

8�� � ��� �� ��� ������� ������ � ��������� �� ������ � �� ����

�� ,��. P �� � ��� �� ,��. P �� �� ,��.

Page 9: The Art of Computer Programming - Bitwise Tricks and Techniques

- ���������� �������� ����� *� �"

��6���%��������(���8��(���'( �����&(���-�������9� ����������0==��������0==��! �������( ����������!����7�����

� ���� �������$�������� ����� �� # �� ,�L �.� � P ,�� �. L ,�� �.� ����4��� ������� ��������� �� �������� ���� ��������� ����������� �� ��$

� �������� ����� �������� ������ � �������� ��� �� ��� ����� ���� ���� ������ �� �� %���� ����� # ����� � ��� ������� ����� ��� �� ����� � ����� ���� 3��� *� 3�������� ���� ��� �� �� ��� ��� � ������ ������ ����������� �������/ # ����� ����� � ��������� ����� �� A&������ �����B ������ ����� �� ?*!� ������ ���� ��� ���� �� ��� ��� ���� � ��� ����� � ���� ��� �������� �������� ��� �� �������� ���� � ,��� ������� !5.� 1� ��� ������ ������� �� �� ��� �� ��� ���� ������ ������������ ����� �� ����������

���� ��� ! ����� ����� ���� ������� 0 ��� ��&��� ����� ������� � ���� �'�� �( 1,'� � 2�( 3 ''� � 45�( � 4(.�6��� �0 ��� ��� �� � �� ���� �� � �� ������� ����� ����� ������ �� ��� $�� � �,,�'�� �( � 7�. 3 7. �� � � 7�'+����� �� +� ������� 78� 6��� ��� ������� 7*�(

������� �� ���������� 4� ������� � ������� � �� ��� �$�������� ����$����� �� )������ -�"� � ��� ��� ���� ���������� ���� ������� �� ��� ��� �� �� ��� ���� � ��� � ����� � � ���� � ������� ������� '�� ��� �������� �������������� ������� �� ���������� � ������ ���� ��� �������� � ��� ������� ���� ������� � ���� ��� ������( G� 8� O���� �� �� ���� A������� ���������B 4���� ���� ��� ���� ����� ������� �� ����� �� ������� ���� ���� � ���� � ����

3� ����� �� � ���� � ���� �������� � � ��� ����� �� � ����� ����� ����� � ��� ����� �� ��� �� ��������� �� ����� - ���� � � ��� ; ���� � �/

� P ,,,�� -. K�.� ;. K �� ,��.

4�� ��� �� �� ���� ���� ��������� ��� �� ������ ����� � �� ����� �� ���������� ��� 3� ����� �� � � �� ���� ���� � ������� ���� ��� '�� � ����������� ��������� ���������� ,���� �. ��� ���� � �� �������� ���� � �� �����/

� P ���� "!� � P ,�� ;. ��� =� � P �� ?� ,�.

#�� ����� A���B ��������� �� ��� �%��� ��������� ������� � ��� �������� ��

� ��� !� P �L ,!�� .� ,�.

3� ����� �� �� ���� � P �L " �� ,��. ��� ,�.�)��� ������� � ���� ������� � ����� ����� �� ������ ��� �� � �� ����� ����/

4� ��� ��� %���� � ���� � ���� ����� � ���� �� ��� � ��� �� ������ ����

Page 10: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ;

���� !!�#��! ��!&���&( (����� &# ��� ���0��7 � ���������

������� ���� ������ �������� 6������ ����� �������� �� ��������� ����� ���� ���� ������ �� ������ ���� �� ���� � ����� ����� � ������ ��N��

��� � ������ ������� ������� �� �������� ���� �� ���� $��� ������ ��������� ��� ���� ��� =- � ���� ���� � ���� � =-$��� ���� )������� � ����� ������ �� ���� � ��� � � � ��� ���� ������ ��� ���� 5!-� �� ���� �� ������� � ������ ��� ���� ��� � � ��� ������� J� ��� ��( �� � ����� =-$��������� �� �%����/

�; P 5 5 5 5 55 55 5 5 55 55 55 5 55 5 55 555 5 5 5 555555 ��) P 5 55 5555 55 55 5 55 55 5555 5 55555 55555 5 5 55 5555 55��: P 55 55 55 5 5555 555555 5 5 555555 55 5555 5 55 555 55 55 5 ��> P 55 555 5 555 5555 5555 55 5 55 555 5 5 55555 555 5 555 5 55 5��? P 5555 55555555 55 5555 55 55 55 5555 55 55 55 55 5 55555 5555��@ P 5 55 55 55555 5 55 555 5555 555 5555 555 55 55 5 555 55 5 555��* P 5 555555 5555 55555 5555 5 5555 555555 5 5 555555 5 5 5555��A P 55555 5 555 5555 555 5 55 55 555555 5 55 55 555 55 55555 5 55 5�

�� ���� ������ !� K �� ����� � 5 � � � ; !� �� ���� � �������

����*?�� ,� L =". ,��.

�� � =-$��� ������� ��� ��� � ��� ������ ��� �� � 3� ����� �� ��� � ��������� ����������� �� �� ��� :��� � ������ ��� � �� �� ��� ������ � �;/

��� ������ 9� � ���*� '����� � � 4(����� ����� ���� 97 � ����������� �������� 9� � � �� : '����� � 3 �� (���� ������ 97 � '97� 9�( �� ������ ������� ;���� � !��" �� �'97( � ��

,��.

J����� ���� ��� ������ ��� � � ������ �� � ��� �� � � ��� ������ ���������� ���������

4� ��� � �%�� � �� ���� ��� ���� �� ���� �� �� �� ���� ���/

�; P 555555 5 5 5 555 55 5 55 5 55 55 55 5 5 55 55 5 5 5 5��) P 55 5555 55 5 5 55555 55555 5 5555 55 55 5 55 55 5555 55 5��: P 5 55 55 555 55 5 5555 55 555555 5 5 555555 5555 5 55 55 55 ��> P 5 55 5 555 5 555 55555 5 5 555 55 5 55 5555 5555 555 5 555 55��? P 5555 55555 5 55 55 55 55 5555 55 55 55 5555 55 55555555 5555��@ P 555 5 55 555 5 55 55 555 5555 555 5555 555 55 5 55555 55 55 5 ��* P 5555 5 5 555555 5 5 555555 5555 5 5555 55555 5555 555555 5 ��A P 5 55 5 55555 55 555 55 55 5 555555 55 55 5 555 5555 555 5 55555(

��� �� P ��� � ������� � ������� �� �� �� ,��.� �� ��� ���� �����

����*?�� ,� L =".� ,� .

��� ��� �� ��� �"���� � ��� � ��� ��� �� ��� ��� ��� ���� � ,��. ������

��� ������ 97 � 97� 9����� ������� ;���� � !��" �� 97 �� ���

,��.

,#�� � ����� �� ��� �� � ������� � ��� ��. H���� ���� ��� � ����� ��� ��

#���� ����� �� ���� � ��� �� ��� ����� ��� � ������ �� � �� ,��� ������� !-.�

Page 11: The Art of Computer Programming - Bitwise Tricks and Techniques

= ���������� �������� ����� *� �"

&�0%�����==(���(%�����==!�(���(%�������

����

�� �������� ��� �� � ������ ������

� !" #� �� �

!$!%" # !$!%" &� �� � � �� �

'()$ # '()$ � '()$ & '()$ *� �� � � �� � � �� � � �� �

+(!$ # +(!$ � +(!$ � +(!$ � +(!$ & +(!$ , +(!$ * +(!$ -� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

�� � � � �� �� � � � �� ��� � � � �� ��� � � � �� �� � � � �� ��� � � � ��� ��� � � � � �� � � � ��

� !" .� �� �

!$!%" . !$!%" ��� �� � � �� �

'()$ . '()$ �# '()$ �� '()$ �&� �� � � �� � � �� � � �� �

+(!$ . +(!$ / +(!$ �# +(!$ �� +(!$ �� +(!$ �� +(!$ �& +(!$ �,� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

��� � � � ��� ��� � � � ��� ��� � � � ��� ��� � � � �� ��� � � � ��� ���� � � � ���� ���� � � � ���� ���� � � � ����

� !" �*� �� �

!$!%" �* !$!%" �#� �� � � �� �

'()$ �* '()$ �. '()$ �# '()$ ��� �� � � �� � � �� � � �� �

+(!$ �* +(!$ �- +(!$ �. +(!$ �/ +(!$ �# +(!$ �� +(!$ �� +(!$ ��� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

���� � � � �� ��� � � � ��� ���� � � � ��� ��� � � � ��� ���� � � � ���� ���� � � � ��� ���� � � � ��� ���� � � � ����

� !" �&� �� �

!$!%" �& !$!%" �.� �� � � �� �

'()$ �& '()$ �* '()$ �. '()$ �#� �� � � �� � � �� � � �� �

+(!$ �& +(!$ �, +(!$ �* +(!$ �- +(!$ �. +(!$ �/ +(!$ �# +(!$ ��� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

���� � � � ���� ���� � � � ���� ���� � � � ��� ���� � � � ��� ���� � � � ��� ��� � � � ��� ���� � � � ���� ���� � � � ��

������ ��� �� ��������� ��� ������������ 4������ �� ���� ���� � ��������� ����� �� ���� ������ ������ �� � ��� ���� �� �� �� ���� � �� ������ ��� ��� ��$��$���� ���������� �� �� �� A���$�������B ������� ��� ������ ����� �� ���� ��� ���� ���������� ���������( ���� ���� �� ���� ����� ��������������� ���� ���������� ���� ������ �� �������� ��� ����$��$ �� ������������ �� �� A ��� �$������B( �� ���� ��� ��� ����� ���� ��� � ������ ���

# ���$������ ������� ����� ��� ����� �� ���� ������ ������� ���� ��$�������� �� ������ ��� ������ �� �� �� ����� '�� � ��� �$������ � ���������� ���������� ���� 3� ����� �� ���� ������� ��� ���� ����� ��� �� �����( �� �� P R!�K �� ����S� 1� ��� � ������ ��;� �)� � � � � �A� �� ���$������� ����� ��� ���� ���� �� ��� ������������ � � ���� � �� ��� �$�������� ���������� �� ; ! ���� ���/

,�;�) � � � �A.:�� P ,�;�) � � � �@)).:� ,��.

)��� � �� �� ��� �$������ ��� � ������ ������� ��� �� �������� ������

,�A � � � �)�;.:�� P ,�@)) � � � �)�;.:� ,�.

��� ���� ������ �� ����������� � ���� ���� ��� ���� ������� �� ��@))��B;

!��� P@))��B;

!�R!�K �� ����S P� ���B;

!�R!�K �� ����S���� !@):� ,�.

Page 12: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� *

����&�(��#=����

�� ��������� ��� �� � ������ ������

� !" �&� �� �

!$!%" �. !$!%" �&� �� � � �� �

'()$ �# '()$ �. '()$ �* '()$ �&� �� � � �� � � �� � � �� �

+(!$ �� +(!$ �# +(!$ �/ +(!$ �. +(!$ �- +(!$ �* +(!$ �, +(!$ �&� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

�� � � � ���� ���� � � � ���� ��� � � � ��� ��� � � � ���� ��� � � � ���� ��� � � � ���� ���� � � � ���� ���� � � � ����

� !" �*� �� �

!$!%" �# !$!%" �*� �� � � �� �

'()$ �� '()$ �# '()$ �. '()$ �*� �� � � �� � � �� � � �� �

+(!$ �� +(!$ �� +(!$ �� +(!$ �# +(!$ �/ +(!$ �. +(!$ �- +(!$ �*� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

���� � � � ���� ��� � � � ���� ��� � � � ���� ���� � � � ���� ��� � � � ��� ��� � � � ���� ��� � � � ��� �� � � � ����

� !" .� �� �

!$!%" �� !$!%" .� �� � � �� �

'()$ �& '()$ �� '()$ �# '()$ .� �� � � �� � � �� � � �� �

+(!$ �, +(!$ �& +(!$ �� +(!$ �� +(!$ �� +(!$ �# +(!$ / +(!$ .� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

���� � � � ���� ���� � � � ���� ���� � � � ���� ��� � � � ��� �� � � � ��� ��� � � � ��� ��� � � � ��� ��� � � � ���

� !" #� �� �

!$!%" & !$!%" #� �� � � �� �

'()$ * '()$ & '()$ � '()$ #� �� � � �� � � �� � � �� �

+(!$ - +(!$ * +(!$ , +(!$ & +(!$ � +(!$ � +(!$ � +(!$ #� �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� �

�� � � � �� � � � � ��� ��� � � � ��� �� � � � �� �� � � � ��� �� � � � ��� �� � � � �� �� � � � ��

J������ ������� ���� �� ���� ,�A � � � �)�;.:�� �� ��� ���� ���� � ��� �� ���,�;�) � � � �A.:�� � ��� ���� ������

,�;�) � � � �A.:�� P ,�*> � � � �)�;�):A � � � �*@�*?�)C) � � � �>D@�>D?�@)) � � � �??C�??D.:

�� �� ��� %���� ����� ��� �� ��� �� �� � ���� ��� �� ,)�� ������� !;�.H��������� ��� �������� �����%������� ������� ���� �������� � �� ��$

������� ����� � ��� ����� �� �� �������� �� �� �� ������$��N�� ������ ������� � ���$������ ����������( ������ � ������ ! �������� ��� =-$��� ��������"#$%&'���(��� ��� � �� ��� ��� �������� E�)�� !��* ���� +�� ������ ! ���� �������� ������� 5 ��� ��� ���� ��� ���� �� ������� � ��� ��� ��� ������ + �� �� ��� 1� �������� ���� � ��� �$������ ����������� ������ ����� �������� ��� � ��� +� ��( �������( �� ��� � �� ���� =�

��� �� ��� ! � ������ ��� ��������� A�� � �����B � ���$������ ��� ��� �$������ ����������� ��� ���$������ ������� �� ������ � ���$����� ������� 5 ��� ���� 5 �� ��� ��� ��( ��� ��� �$������ ������� �� ������ � ������$������� ��� 5 ��� ���� 5 �� ��� ������ ����� '������ � ���� ��M������ ���� ����� �������� ���� ����������� ���� �� ��� ���� � ������� �� ������� ����� ������ ������ ���� �� �������� �� ���� �%���� ��� ��� �� �� ���� ������1� ��� ���� ����� �� ����� � � ��� � ��� � � ����� ����� ���� �� �������� � �� ��� � ��� �$������ ������� ���������� �� � ���$������ �������

Page 13: The Art of Computer Programming - Bitwise Tricks and Techniques

< ���������� �������� ����� *� �"

�0��!��� &���==�!���0 &���'������0 &���!�7��0 &������ � &���E0��(��-��E�����(��0 F���( ���������&���# 7�(������+ � �( �������

��� ����� � ���� ����� ��� ��M����� �� �������� � �� � ���� ���� �� �������� ����� �� ��M����$��N�� ������� � ������ ������� ���������

������ ���� ��� �������� ����� '��$������ ��� ��� �$������ �������������� ���� � ������������ � �� ����� � ������� ��� ��� � ��������� ��������� � ����� �� ��� ���� ���� �� A ���� �����������B )��� � ��� ������������ ������� ������ ����� ������%��� �� ����� �� ���� ����

� � �� � ���� ��� ���N�� !$���� ������� �� ��� ���� ��� ���� �� ��� ��

� P ,� 5 � 5�.:( ,�.

�� ���� ����� � �������� � ���� ������ ,��� �������. ����� ����� �� � ������ � 5� ����� �� � ���� �� �K ����� ��� � ���� �� � N���� � ���� � 5��� � 5� ,��� ���������� �� ���� � P �!� ��� � P��. +����%���� �

Q� P ,Q� 5�5 �.:� ,.

�� P ,� 5 �5 �.:� ,.

�� P ,Q� 5� 5�.:( ,�.

��� �� ��� ���� Q�K P �� P �� � �� �������� ���� ,��. ��� ,� .� 4��� ������������ �� ��� ������ ������� � ������ � � �� ����� ���� ����/

�L ,�� . P , � 5 �55�.: R����� ��� �������� S( ,�.

�L�� P ,5�55� 5�.: R������ ��� �������� S( , .

� � �� P , � � 5�.: R���� ��� �������� �� ��� ��S( ,�.

���� P , � �55�.: R����� ��� ���� �� �� ��� ��S( ,�.

� � ,�� . P , � 5 � �.: R���� ��� �������� �� ��� ����S( ,�.

�� ,�� . P ,5�55� �.: R������ ��� ���� �� �� ��� ����S( ,�.

Q�L ,�� . P ,5�55�5 �.: R������� ������ ��� ���� �� �� ��� ����S� ,�.

#�� ��� ���� ��������� ������ ��� ������ ������/

,,��,�� ..K . L � P , � 55�55�.: R����� ��� �������� �� � �S� ,.

4��� � P 5� �� � ����� ��� �� ������ 5� ��� ���� �� ���� � � R3�$�� � ,�. �� ��� �� 2��� 4����� �� � , ?=5.� "!!( ��� ,. �� ��� ��8� ��� & ������ �� �� , ?* .� -5*7-5<� )�� � �� 8��� )� 4���� T���� � , ?**.� -"?7-- �S

��� %������� � �� ����� ��� ��� ����� �������� ��� ����� � ��� ��� N����� �� �� �� �� ��� � ��� � ����� � � ��� ������ ��� ������� �� �� � ���� ����� ������ � ��� ���� ���� ���� �� ���� ���� �� �������� ������� � �� ����/E �� �� ����� � �� �� ��� ������� ���� � ! ���� ������� �� ����� �P 5( ��� �� ����� �5 P�� ��� ������� � ������

�,!�K . P 5� �,!�. P �,�. K ,.

� �� ���� �� ����� �� � ���N�� �� #����� ����� � ����� �� ����� � �����

�,�� �. P �,�� �.� ,�.

Page 14: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ?

/�((����//!�0�� !���!���< � &�� ����� -��� )� �� �# ���������:%���� ���������� ��&(���"����� ��������,,�1��GG�G

��� � ����� ��� � �L�� �� , . � ��� �� �� �$����� ��� �������� ������ ���� �� ��� �� ���� ���� �� ������� ����� � ����� ��� �� ��� ��� � �������� ��� �� �������� �� ���� ����� ��� ��� ���� ������ ���� ������������ � �� ��� ������� ���� �� ����� ����� 3� ����� �� � ���$������������%����� ��� �� T� G� �� ���� ��� :�� %���� � ��� ���� � �� ����/

���� ��!�* ���� ,-����!� ,�.

4� ��� ������� ��� ��� ��������� ���� �� ��� � � �� ������ �������� �������( ��� ���� ��� ������ � �� ��� ������%���� ��� ������� � ���� ����

��� ��� ����� $������ ������ ����� ��� � A����� ����B ��������� ������ ���� �� �� ���� �� ���� ���� ��� ��������� ���� �

�; P , � � � 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 .: P � �"��) P , � � � 55 55 55 55 55 55 55 55 .: P � �;��: P , � � � 5555 5555 5555 5555 .: P � � *�

, .

��� �� ��� �� ����� �� �� ��� ������� !$���� ������ � �,!:�K .� �������,!:

K .�� P ,��� !�. K �� P , � � � .: P � � 1� � ������� ���� ��� !�$��� ������� �� ����� ���� ������� ��������� � ������ �� �� ��� ��� �����������������

��� P ,!:�� .�,!:

K . � 5 � � � �� ,�.

����� ��������� �� ��� �� �� �� ����� � '�� ��� ��� ������� ������� ������ ��� ���� ��� �� � ��� ��:������ �������� ���� ,���� � ����� �� *� �!7, ..�

4��� � �� � ���� � !� �� ��� ��� ����� ����� �� �������

�� P R�L �;P5S K !R�L �)P5S K -R�L �:P5S K <R�L �>P5S K � � � � ,�.

������� R!� L �� P5S P �� ���� � P , � � � �>�:�)�;.:� ����� �� � !�$��� ���������� ��� ���� ���� �� 5 ��� � � �L��( ���� ��� �� �K!� � �L��� P 5� �5 � � � �� ���� ������� ����� � P �� ���� � �P 5� ,�� � �� ����� �5 P !� � ��� ����� ��� �� �� ���� ��� ���� �� �� �������( ��� ������� "5�.

3� ����� �� ��� ����������� ���� ����� ����� ��� ��� ����/

.� /��/ �################ *. /��/ �����������������*

. /��/ ����������������� *.� /��/ �����������������*

." /��/ ����������������� *.# /��/ �����������������*

��/� +�!* ��� +�!�+* ��� �+�.#* 0�0 ,-�� ��*

��� �+�."* ��� ��,-��$* 1�0 ,-�� ��* ,��.��� �+�.�* ��� ��,-��&* 1�0 ,-�� ��*

��� �+�.* ��� ��,-��"* 1�0 ,-�� ��*

��� �+�.* ��� ��,-��* 1�0 ,-�� ��*

��� �+�.�* ��� ��,-��* 1�0 ,-�� ��*

���� ���� P ?�� 1 �� ��� � �� ��� ��� ��� ���� ���� ��

��� +�+�,-�* ��� ��,-�����+* ��� ,-��,-��� ,��.

���� ,-���� ������ �� ��� ��������� � �� ��������� !?$���� ��� �� ������� ���� ��� � ���� �� �K "��

Page 15: The Art of Computer Programming - Bitwise Tricks and Techniques

5 ���������� �������� ����� *� �"

� ���"� �#�(�,�����H��������� ���������((��(( �!��� &���=

��=I(0 'J=&���# (�0����!=( �!���K�����0%��������GG��G,,�1����������( ��F� � ��&���� �����������

��� ������ ����� $������ ������� �� ��� ����������� � �� �� %������M����� 1� � =-$��� ������� �� ����� �� ����� ���� � � �L��( ��� ���� ������ � ����

� � �������,,� � �. ��� !*?.� ;<

�� ,��.

���� � �� � ������ � �� ��� �� ��� ������ �� � ������ � =-$���� ��� �� ����������� � P ,�*> � � � �)�;.: ���� ���� ��� ������ ���� ��� =- ���������

�*>�*: � � � �@D� �*:�*) � � � �@A� � � � � �@�? � � � �;� �?�>�:�)�;5� � � � � �;55555

�� ��������� H������ !�"�-�!7!" ����� ���� ���� ���� A�� '��:� ��� ��B �����(� ����� �� �� ��� ��� 6� 8� 6������ �������� ����%'(%�"��&��'� ������� ��������� �� ������� "�!�!7 *� ��� �������� ��� � ������ R5S� � � � � ������ R="S ������

55� 5 � ;=� 5!� ;*� -?� !<� 5"� = � ;<� -!� ;5� "<� !?� *� 5-�=!� -*� ;?� "=� -;� -"� ; � !!� ;"� "?� ""� "5� !-� <� !� 5;�="� ;;� -<� !*� =5� - � "*� =� -=� ";� --� ! � ;!� "!� !"� �;-� !=� -5� ;� "-� !5� " � 5� !;� -� ?� 5?� "� 5<� 5*� 5=�

,�.

R���� ������%�� ��� ������� �� ??* �� 6� OU����� ��� ����������� � �� +� H�O�������� 8� 2����� ��� I� 8� C���� � �� ������ ��� ,����� �����.�G���� )�� ��� ���� � ���� � ������ �� ??-� ���� � ��� �������� ��� ��S

������ ���� ��� ��!����� ����� ��� ������� �� P � � ��� ����� �� ��� ���� ������� �� ������ ��� ������ � ���� � � 5� ��� ��������� �� H%� -�=�"7,�.��� �������� ��� �������

� P 5( �,!�. P �,!�K . P �,�. K � � � 5( ,�.

��� �� �� �������� ���� � � 5� 4��� �� � ���� ��� �� ������� ��@ 1��� ��������� ������� � %����$���$����� �� �����/

2��)� +������3��4��!* ��� +�+���5�* �� 6�.�+�# ,��.

���� ��5� P ����������������� �� ��� V������$����� ������������ � �5�,���� ���� =��. ���� ���� V���� �� ���� ������� ��� ���������

'�� � V������$����� ��������� �� ��� ���� � ���� �� �� � ����� ��������������� ���� �� � �� �� � !�$��� �������� 4� ��� ���� ���� � � 5 ���� � �( ���� �� ��� � � � K !� ��� � � �� !� � � L Q�� �P 5� � � P � � �� � � � � 5 ,� ���� � �� ������ �� ��� ����� ���� � ���� ��� � ��� �� ���� ������� ��.� ��� ���� ���� ��� ����� �� ,��. ��� ,��. �� ���

���� �!�.#* ��� 7�!��* ��) +�!* 1��0 +� �7* 0��0 6�.� ��*

���� �+�."* ��� 7�+�$* ��� ��6�.�$* 1��0 +� �7* 1��0 6�.� ��*

���� �+�.�* ��� 7�+�&* ��� ��6�.�&* 1��0 +� �7* 1��0 6�.� ��*

��� ��6�.����+* ��� 6�.�6�.��* ,��.

��� ��� ���� ���� �� �K *�� �� ���� ���� ��� � 6�.��� ��� !;= ������� ���� ��� � 5 � � � !;=� J����� ���� ��� A���������� ���B ,1�. ��� AN�� � ���B,0�. ����������� ���� ���� ���� ��� ������� � ����� ������������ ���� ������ ���� ����� ���� ������ ������� ���� ��� ����� � ���� � �����

Page 16: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� ��������

�!���0 �0��E���� � )��#�����! � &���+ � ���-�#� ��!��� �������0+ � ���-�#����-�#� ��������=��&���(�0���!�((������(����� �����������(��#E�(��E�(��((��((��,�((�/���!���� !�� !� � ,�((������ �

���� ������ �� �� �� ���� � ��� �� ������ ��� ������ ��� ���� �������� � ������� ��� ����� �� ��� ���� �� ����� �� �������� ��� �������� �� , .�3� ���� ������ �� ��� � ������� � � �� ��� ���� ��� � � �P 5( ��� � �����A������� ����B ������ �� �������� ����� ��� ����/

)�� � � �� ���� � � � � ,�� !�. � 5 � � � ��

��� ������ ��� � � �� ���� � � ,�� .� ,� .

R����� ���$V������$����� ������� ���� ���� ��������� �� 8� )� 4���� T�S1��� ��������� �� ��� �� � � ������� ��� ������� ��� ������ �� �

�� �� ���� ���( ��� ������� "?� '�� ���� �� � ������ � ���� �� �������$����������� ��� �� �������� ������ � ��� �� P ��� ����� �������� �������� ��� �� �� ����� � ��� ��� ���� �� ����� ������� �� � �� %���� �/

�� P �� � ��� �� � � �� � � �L �� ,��.

R)�� ������� -5� ���� � ����� � ����� ��� ��������� �� 4� +� O���� �� !55=�S4� �� ��� ,��. �� ��� �� ������ ������ ��� �� ������� ���

"� ���#� � ������ '���� $��� ������ � P ,���) � � � �)�;.: �� ���� ������ ������� ������� ! � ��� $� ����� ������� �5� � � � � � � �� ���� � � !� ��� �� � � !� � �� ��� �������� �� ��� �� ���� ������� ��� ����� ������ ��� � ������ � !� ��� �������

"� P ���) K � � �K �) K �;� ,��.

����� �� �� �� ��� A�������� ���B � A���� ����� �����B � �� � �� ��� ���������������� �� ���� ����������� ������� �� �������� ��� ������ ��� �!�� ���� ���� ����� � � ������ �� !� ���� �������� ����� �� ��������� �� -�=�"7, .��������� ��� �������

"5 P 5( ",!�. P ",�. ��� ",!�K . P ",�. K � � � 5� ,��.

�� � �� ��� �� ���������� ���������� ���� ��� � � ������� ,������� �!�;7 .�

�� P K ",�� .� "�( �%���� ��� �����B)

�� P � " � ,��.

��� ��� �������� �� ���������� ��� ���������� �� ������ ��� ��

���������� ������� ������ �� 4� ���� 4��� �� ��� &� � ������ ������� ,C���$���� 6����/ #������74�� ��� ?;*.� ;;� ? 7 ?"� �������� �� ���������� ���$������ � �������� �������� ��� �� G� '� &� ��� ��� T� +� 2� 6� �� ���������� ��� ������� � ��� ";$��� ������ � ��� HG)#+� ��� �� �� ���� ��������� �� ��� � ����� =-$��� ������� � "� ���� � P ,�*> � � � �)�;.:/

)�� � � �� ,,�� . L �;.� ,J�� � P ,#>) � � � #)#;.?� ���� #� P ��=) K �� �.

)�� � � ,� L �). K ,,�� !. L �).� ,J�� � P ,$)@ � � � $)$;.)*� $� P #�=) K #� �.

)�� � � ,� K ,�� -.. L �:� ,J�� � P ,%A � � � %)%;.:@*� %� P $�=) K $� �.

3��� � " � ,,� � �. ��� !*?.� ;=� ���� � P , .:@*� ,��.

��� ��� ���� � ��� � �������� � ��� !;; P %AK� � �K%)K%; ��� �� ��� ������������� ��� ��� ���� ��� ��� ��� ������� � �� ����� ����� RG���� 6� � ����������� � ���� � ������ � ��� �<<�!� � ������� �� ?;-�S

Page 17: The Art of Computer Programming - Bitwise Tricks and Techniques

! ���������� �������� ����� *� �"

E0�7��( � &���=��7�� &# : ��� ���8�!�0�� !���������#���!0��E��&�0%�����(���(%�����,���-�����0 &���===

� � �� �������� �� �� A������B ������ �� ���� � �� ����� �� ��� ��� ����� ������ R2� 4����� �� � , ?=5.� "!!S/

)�� " � 5� � � �� ���� ��� � � �P 5� ��� " � " K � � � � L ,� � .� ,�.

# ���� � �������� ����� � � � � ,�K .� ���� ���� � �� �������� �� �� A������B

��� ������� 3� �� ���� ����� ���� ������ � P ,�*> � � � �)�;.: �� ��� ��$���� ��� ������ �� P ,�;�) � � � �*>.:� #������ ��� ��� ���� � ����� ������� ������� �� �� ������ ������� ��� ,��.� ,��.� ,� .� ��� ,��.� �� ����� ������� A#��>���� ����� �� ��� ������ �� ! ��� ���%��F � ����� � ������������� ��� �� ����� "!$��� ������� �� ��� ����� =-$��� ������ � ������ ���� ������� ,��.� P ����� # �� ���� �� �� �� ��� � ��� "!$��� ������ ����� � �� ���� �� ��� � ��� ������� ���� ���� ��� �� �� ���� ��� ���� �� �B

C����� 3� ����� �� �� ��� ����� �� <$��� ����� �� ���� ���� �����/

=�$�� �A�*�@�?�>�:�)�;���� ���� �*�A�?�@�:�>�;�)���� ���� �?�@�*�A�;�)�:�>���� ������� �;�)�:�>�?�@�*�A

,�.

#�� ��� ���� ���� ����� �� ����� =- ����� 3������� �� ���� � ��� ����������������� ���� ��� �� �� %���� ���� � ���� ��� �� � � ��� ����� ����� ��/

� � ,�� . L �;� � � ,�L �;.� � �� � � �(� � ,�� !. L �)� � � ,�L �).� !� �� � � �(� � ,�� -. L �:� � � ,�L �:.� -� �� � � �(� � ,�� <. L �>� � � ,�L �>.� <� �� � � �(� � ,�� =. L �?� � � ,�L �?.� =� �� � � �(�� ,�� "!. � ,,�� "!. ��� !*?.�

,��.

R+�������� )������ ����� ���� ������� � ���� ����������� �� �� �

, ?= .� -=� ��� � ���� � ������� ������ ��� ������� �� ?*" �� '��� '���$��� ,��� ������� -?.� ��� ����� � ������ ,��. ��� �������� �� 8��� )�4���� T�� �� �������� ������� ,#������74�� ��� !55!.� 5!�S

'�� ���� �� ���� ����� �� � �� ���� ���� ����� $������ ������%�� ���� ��� ��������� �������� ���� �� ��� :�� ���� ����� +������

,�8 /��/ ����"�&��"�&�* ��� !�!�,�8* ��� !�,�8�!* ,��.

��� ��� ��� ���������� ������ ��� ����� � � �� ���$������ �� ��� �$������� ���� ����� ��� � ��� ������ ������ ��� ���� ������ ���� �����

��� ��������� )������ �� �� � ���� �� ���������� ��� ���� ������ � �������� � �� � ���� & � �� 4��� ��� � �� � ���� ��� �� ������@ ,G�� ������ ���� ����� � � ������ ��� �� �� ���� ��� �� �� ��� ����� � ���� ����� ��� ����>������� ������ �� ��� ����� �� ���.

O�� Æ P &� �� 8�� �� ��� �� ����� ,��� ����� ���� ���� ����� ����./

� � ,��Æ.L!� � � � ,�L!�.�Æ� �� ,�L�. � � � �� ���� � P ! �!� � ,� .

Page 18: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� "

����

Æ%�-��&�� �!�������====�!������� ��-���/�0���� ���(������L�

�� ���� ��� ����� ��� ��� ������� '�� ��� ���������� �������� ���� & ��� ��� ����� ���������� �� �� ��� ���� � ��� ��� ���� � ,��.� ������ ���� � ������� � �� ������ ������� � ��� � ����� ������� � � � ��� ���� � ��

4� ���� ������� �� ������ ������ ��� �������� ��� ��� ��������/

� � ,�� ,�� Æ.. L !� � �� �� � � ,�� Æ.� ,��.

��� ��� ���������� ��� ���� � � �� ���� �������� �( ��� ������ ������� � ��� � ,� � ��. ��� �� �� �� � ,� � ��.� �� ������� �� ����� ���� ���� ���� �������� � ��� �� � ��� �� A������ � �� ',�.B ���� � ��� �� � ��� ��A������ � �� �� (,�.�B ����� ��� ���$��M����� (,�. ����� �� ���� �� �� �� ����

1� ��� ���� ����� ������ � ����� �� ����� ,� . ����� �� ����� � �� ,��.�������� ��� ����������� �� � ��� � �� ,� . ��� ��������� �� ������ ���� ��$����� �� 4��� �������� �� � ������� ,� . ��� � ����� � - ��� � ,��. ��� ����� ;�

1������� ,��. ��� � ����� �� ���� �� ���� ����� ���� � ���� ���� ��$����� �� ���� �� ��� � ����� ���� ) ������� � !� /

� � ,�� ,�� Æ.. L )� �� �� � � ,�� Æ.� ,��.

O�� �� �� ���� �������� � AÆ$�����B ������� �� � ��� �� �� ���� ��� ���$��� ������ ���� � ���� ���� �� Æ � ���� ����� ��� ���� ) ��� � �� ��� ����$���� �������� � ���� ��� ������ �������� �� �� �������� 3� ����� �� ,��. �� ���� ��� ������ !; ���� � � =-$��� ��� ���� ��� �������� !; ����� ��� � ���$��� ��� - ���� � ���� ���������� � �� �� Æ P "? ��� ) P !:@ � P ��������

������� ������ �� ����������� ��� �� ����� =- ���� ����� Æ$������ ���� �

� � ,�� . L �;� � � ,�L �;.� � �� � � ��� � ,�� ,�� -.. L ������������������ �� �� � � ,�� -.�

� � ,�� ,�� <.. L ������������������ �� �� � � ,�� <.�

� � ,�� ,�� !5.. L ������������������ �� �� � � ,�� !5.�

�� ,�� "-. � ,,�� "5. ��� !*?.�

, �.

������ ��� � ��� ������� ��������� �� ,��. ���� ������ ,��. ���� A��������B

$��� ���������� �� ������� ��� ������� ����� :��� ���� ��� �� �������� �������� �� �������� ���������� � ��� ���� �� � ������� �� ���� ���� � ���� ��$��� ����� );� � � � � )@� W)?� � � � � W); ���� ���� ��� � ����� ��������� ������ � P,�*> � � � �)�;.: ���� ��� ������ ���������� �� P ,�*>� � � � �)��;�.: � ��� ����/

�� !�$���� � � ���� ���� )�� � � P 5� � !� "� -� ;(

�� !�$���� � � ���� ���� W)�� � � P -� "� !� � 5�, �.

�� ����� � � ���������� � !� ���� ��� �� �������� ���� !� � ���� ����������� ��������� ����� )�� W)�� ���� ��� ���� ��������� �� ��������� � !;�!)� � � � � !��)� � � � � !)� !;�

�� ���� ���� ���� �� ��� ��� � ������ ���� � ��� ���������� ���������������� ����������� � �� #� 6� G����� ��� T� O� +�� �� ?;?� ����� ���� �� ��� � G� ) ����� R��� �� H� '���X�� ����������� ������ �� ���������

�������� ��� ��������� ���� ,J�� Y��/ #������� 2���� ?=;.� )������ "�"S�

Page 19: The Art of Computer Programming - Bitwise Tricks and Techniques

- ���������� �������� ����� *� �"

���0�&( ��-���+ � �! ��-�������&� !���(0���&������ 0���

3���� ! ����� � ���������� ������ � ,! . � ! � ������ ���������� ��

��� ���������� ������� � � ������� ���� P -� H��� E � ����������������� ��� ���� �������� � ��� ��� ��� �� ���� ����� ����� ��� ��� ����������� ���� � ����������� ����� �� ��� ���� V��� �� �� �� ����� H��� �������� ��� ��������� ������� ������ ������ � ,! . �� ������ � ���������� ���� ������( ������� �� �� ���� �� ���� ���� ��� ���������� � ��� ! ��������� �� �������� �� ���� ������� � ��� ��������

��� ����������� � 3��� ! �� ���� ��������� �� ���������� �� ����� ��)������ �� ���� �� ���� ��� ������ ,5� � !� "� -� ;� =� *. �� ,"� !� -� � =� 5� ;� *.���������� �� ��� ��� :�� �� �� �������� ��� �������� � ��� ���� :��� ��� ������ �� ��� � ������� ��� :��� ���� ��� ��� �� ���� ����� �� ��� ���� ���� ���� � ������ �� ��� ��� ������� �� ��� ���� � ,-.��� ����� �� ��� ������

5 !"-;=*

��

(�

�9

-

��1��2/:

"!- =5;*

, �.

�� ���� �� ��� ����������� ���(��9- ��� ��1��2/: ���� ���� ��� �� P �5� ����� (� P �!� "�� � � � � �9� -� P �=� *�� ��� �� �� 9� P ��� 1� �� /�� ��� (� �� -� P��� �� 2� :�� ��� �� P �"� !�� �1� �� P �-� �� � � � � �/� :� P �;� *�� )������ ����� ������� �� �� ������ - P *� ������� �� ����� ���� �� ������ ��� ��������� ���� ��� �� ��� ��������� ���� ��� � ����� ������� �� ������ /

:P*( /P;( �P;( �P-( �P-( 1P ( �P ( �P5( 2P5( �P=( 9P=� , .

� �� ��� ������ - P =� ��� ����� ������ ��� � ���� ���� ���� � ��� �������

2P=( �P5( �P5( �P ( �P ( 1P-( �P-( �P;( :P;( /P*( 9P*� , .

1������ , . ��� , . ��� ���� �� ���� ���� �� �������� ����� ( P " ,������ P "� � P !� � P !. � ( P ! ,����� � P !� � P "� � P ".�

�� ����� ��� ����� ������ �� �� �� ��� ��� �� ����� ���� ������������ ����� ����� �� ��� ����� ������� ��� ���� �� ����� ������� ���� �(� ��� 9-���� 1�� �2� /:� ���� ��� �� ���� �� ;8 �� �< ������� ��� ��� � ��������������� �� ;8 ��� �� � ����� �� ������ ���� ��� ��� � ������� ����������� �<� ����� �� �� ����� � ��� ����� �� �� ��� �2� �� ��� 1�� �( ��� ����(��� ��� ����� 1�� ����� /:� 9-��� �2� 9-��� /:� 4� ���� � A���� � ����B������� �( ��� ��� ����� ��� ������ ��������� �� � ��� ( �� ����� � ��� ���������������� �� � ��� �( ���:��� �� ���� � ���� ������� � ��� ����� ��������� �� ����� �� ��� ���� ���� ����� �� ��:����� �� ����� � ��� ���� �������� ��� ������� ������� �� � ���� ��:����� �� �������� ����� ������ ��� ����

Page 20: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ;

�#�(� �� � 0����������!���' ������������

� ����

� ���

� ���

%�00+"% 1�)23$0

���� ��

��

�� �� ��

��

���� ��� /�� ������ � � ���� �� � '�( ���� ���� ��� � ���������� ��� ������� ����� ���� 7� '��� ������� �� 1 :�(

� ���� �������� � ���:���� ��� �� � ���� ������ �� �� ����� �� ��� ��� �� ��

��1� ��

/:9-�2

�( �� � , �.

���� ��� ���� ��� � ��������� �� , . ��� , .� � ���� �� � ��M������� ��� ���� �� �� !� ��M���� ���� �� ������ ��� ������� � ��� ��� ��� ����� ���� � ��������

�� ���� ��� ��� ������� �� ��� ������ ��� ���� -$� ����� ������������� ��� ���� ���( ��� ��� !�$� ����� ���������� �� �������� � �� ���� ����������� ������� ��� ��� ���� ������ �������� �������� ��� ����� )� ��� W)�� , �.� )��� ������� � ������� ��� ��� �� � ���� ���� �� ����� � N��( ������ ��� � ������� ��� ����������� ����� � ��� ������������

� ��� ����� ��� ������ �� �������� �� ��� ������ ���� � ��� ������� ������������� ����� ��� �� ����� ���� ���� � ��� ������� �������� ����� ������ ������� 3� ����� �� ��� =-$��� � ������ �� , �. ��� � �� ���� � �� ���� �=5$��� ������� ������� ������� ��� �� ���� ���� � ��� ����������� ��� ���

1 ����� �� ��� ���� ���� ��� ����� ������� � , �. �� ������ ������3� ����� �� ������� ;! ����� ���� ������ , �. ����� ���� �������� ����� ���������� �� <� < ������ ��� �� ��� ���� ����� ����/

��4$5

## #� #� #� #& #, #* #-�# �� �� �� �& �, �* �-�# �� �� �� �& �, �* �-�# �� �� �� �& �, �* �-&# &� &� &� && &, &* &-,# ,� ,� ,� ,& ,, ,* ,-*# *� *� *� *& *, ** *--# -� -� -� -& -, -* --

-�0'"6

## �� #� �� #& �� #* ��

�� �� �� �� �� �, �� �-�# �� �� �� �& �� �* ��

�� �� �� �� �� �, �� �-&# �� &� �� && �� &* ��

�� ,� �� ,� �� ,, �� ,-*# �� *� �� *& �� ** ��

�� -� �� -� �� -, �� --

�&�0'"6

## �# �� �� #& �& �� ��

#� �� �� �� #, �, �� ��

�� �� �� �� �� �� �* �*�� �� �� �� �� �� �- �-&# ,# �� �� && ,& �� ��

&� ,� �� �� &, ,, �� ��

�� �� *� -� �� �� ** -*�� �� *� -� �� �� *- --

�.�0'"6

## �# �# �# �� �� �� ��

#� �� �� �� �� �� �� ��

#� �� �� �� �� �� �� ��

#� �� �� �� �� �� �� ��

�� �� �� �� && ,& *& -&�� �� �� �� &, ,, *, -,�� �� �� �� &* ,* ** -*�� �� �� �� &- ,- *- --

Page 21: The Art of Computer Programming - Bitwise Tricks and Techniques

= ���������� �������� ����� *� �"

� �� ���M:%���� ���0����(�7��0+ � F��� �������+ � ���M:%��!������( ����!�0�� !���/�7�� ��� ���8�'���� ��� ��!���!���������0

Æ%��� ���(

��� A����� ���Z�B �� ������ ��� ���������� ���� ����� �%���� � ���������� � � P , � � � �:�)�;.: ��� � P , � � � �:�)�;.: �� ��� !$���� �������� ������� � � � ,A� N�� ��B ��� %!!�� � ����� � � ��� �. �� ���� ������ ���� ����/

� � � P , � � � �:�:�)�)�;�;.:� , �.

���� �������� ��� �������� ��� �������� �� ��� ������������ � !$���������� ����� ������� � ��� ������ �� ����� � � � ���� � ������ �� � � ��� �������� � � �� J����� � �� ���� ��� ����� ���� ��������� , . ������

�� � �� P ��=)� , .

� � ������ �� ��� �� �� � � ������ ��� � ������ �� ��� ���� �� � � ��������Z� �� ��� ���������� ���� ������� ��� ������ �������� �� � � ��

# ��%����� � �� �������� ����� �� ����� � ���Z� � !�$��� ������( ������ ������� ;" ����� ���� ���� �� ����� ���� �� ������� ����� 1��� ������������� �� �� �� � �� ������ �� ��� ,!�� .$���� ������ � , �. ��� 3��� !�

+������ �� ������� ���� ����� ��� ���Z�� �� �� � P � � � �� � !�$���������( �� ���� �� ������ ��� �� ������ ��� ������ �� �� � �@ )��/ � ����� ����� ���� �� � ����� ���Z� �� ������ �� ����� ���� ����� ������� ���Z� ��� ����� ���� � ��� �� '�� � �� � � �� ������� �� ��� ���� �� ���� ���/ )��� ���� � � � L �;( ���� ��� � � ,� � ,�� !��).. L �� � � P �� � � � � � � 3� ����� �� ���� � P " ���� ������� ���� ,5�>5�:5�)5�;.: ��,55�>�:55�)�;.: �� ,5555�>�:�)�;.:� AG����� ��� ���%��B ���%��� ������

+������ ��� � ��� ����� ��� ��� ���� �� ���� �� ������ ��� ���$���� �� �������� ������ � � �������� ����� )������ ���� ����� � !�$��� ���� P ,�:��) � � � �)�;.: ��� � ���� * P ,*:��) � � � *)*;.: ���� ��� + $����( ����"* P +� ��� ��� �� �� �� ������ � ��� ������� ������

� P ,���) � � � �)�;.: P ,����� � � � ������.:� , �.

���� ���) � � � � � �) � �; �� ��� ������� ���� *� P � 3� ����� �� �� P " ��� * P , 5 55 5.:� �� ���� �� ������ � P ,�>�>�:�)�:�)�;�;.: ����� P ,�>�:�)�;.:� ,��� ��� �� � ����� �� � � � �� �� ��������� ������ �� ��������� ���� * P �;�. 4� ���� �� , �. ���� � ��� �� ���� �� Æ$����������� ���� !�� �����( ��� �� ���� ��� �� ��� � ����� ���� � ���� ����� �� �������� �� �� ��� ����� ������ �� �� ����� ��� ������� � ������

O���� ��� ���� � Æ$���� � � ���� ���� ) �� ��� ��������

� � �� �,�� ,�� Æ.. L )�� , �.

����� ������� ��� �� �� ��=Æ � ) ��� �� �������� �� �������� �� ����� ������������ &�� )��� � ��������� ���� ���� � ���� ����� ����� );� ))� � � � )��)�� ���� ��� ����� ��������� ��� �� , �. ��� �� �� ��� ���� � �� Æ$�����/

)��� ���� �� �( ���� �� � !�$���� � � ���� ���� )��

� � P 5� � � � � � �� ( ��� � ��� � � �� ,��.

�� ���� ��� ���� � ������ ��������� ����� �� �������� � ���� �� )����������� � , � ��� ���� ���� �� ���� - � ���� �� ��� ����� 4��� �� �� � !�$�������� ��� )� �� �� ��� ����� ���� � ����� �-�!�� �� ����

Page 22: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� *

���%���%0������������ � *!�����0�����0E��0�#�(��!������+ �� N����!N '�!�(����7(#

3� ����� �� ���� � P " ��� * P , 5 55 5.: �� ���� ,,;� ,)� ,:� ,>� ,?. P,5� � 5� !� ;.� ��� ����� 5� �� �� ������ �� �� ��� �� �� ����

� , P !�� � ��

��� ); P ,55 5 .:� )) P ,555 5.:� ): P , 555.:� ���� ,��. ����

,�>�>�:�)�:�)�;�;.: �� ,�>�>�>�:�)�)�)�;.: �� ,�>�>�>�>�>�:�)�;.: �� ,5555�>�:�)�;.:�

H������ =? ����� ���� ��� ���� ����� �������� �� ���� ������ ���� �������� ����� ���� :������ 3�������� ������ � � ��� ��� �� ������� ����������� ����� )� �������� � �� .,�:. ����� ,��� ������� *5.�

# A�����$���$�����B �������� ��� ���� ��������� � ������� ���������������� , �. �� ������ ��� ����� �����Z�� ���

� * P ,���) � � � �)�;���) � � � �)�;.: P ,���� � � � ���� ����� � � � ������.:( ,��.

��� &��) � � � � � &) � &; �� ��� ������� ���� * P 5� #�� ���������� � !�

���� �� �������� � ��� �� ���� � �����$���$����� ��������� ,��� ������� *".�

)������ � �� � ��� �� �� �� ������ ������������ �� ������ ��!!�" ����� ������ � ������� )������ �� ���� �� ������

� P ,�:��) � � � �)�;.: �� �� P ,�2:��)4� � � � �)��;�.:� ,��.

���� / �� ��� � ��� ,!�.:�

�������� �� ��� ��� �5� � � � � � !� � � ���� ���� �I� 6� +���� ��� +� I� 4��� R���� ������������ %��& , ?<5.� 5!?7 5"!S��������� �� ��������� ��� �� �� ���� �� .,�. ����� �� ����� ����� Æ$����������� �� ��� , �. ������ ���� �� ���

� � �� �,�� ,�� Æ.� ,�� ,!� � Æ... L )�� ,�.

���� ���� �� �� �� 0 �� ��� ����� � ������� � ���� ���� �/ P -� � 5 � - � !������ ���� ��� ����� );� ))� � � � � )��) ���� ��� ������ ���� � ��� �� !�$����� � ���� ���� )�� ���� ���������� � � 5 � � � �� �� ������ � ���� ������ �� ���� �������� ����� � 0 ������ � ��� � � ���� -� 3��� � ��� ����� ���������� ������� , �. ��� �� ���� �� ������ �� �� ���

3� ����� �� ������� � P " ��� �� P ,�>�)�)�;�>�A�@�@.:� ���� �� ����,0;� 0)� 0:� 0>� 0?� 0@� 0*� 0A. P , � !� 5� !� 5� !� 5� .� [���� ����� ); P ,555 55.:�)) P ,5 55 55 .:� ��� ): P ,55 55555.:� ���� ��� �� !�$����� ��� ���� � P,�A�*�@�?�>�:�)�;.: �� ,�A�*�@�@�?�>�)�;.: �� ,�A�;�@�@�@�>�)�>.: ��,�A�;�)�@�@�>�)�>.: P ��� ����� ��� Æ$�����/ �� �� ,�;�A�@�)�>�@�>�).: ��,�;�A�@�)�>�)�>�@.: �� ,�;�)�>�)�>�A�@�@.: �� ,�>�)�;�)�>�A�@�@.: ��,�>�)�)�;�>�A�@�@.: P ��( ���� ����F 1 ����� ��� <$��� ������� ��� ���������� ��� %���� � �� ���� ���� ��� ��� �� � ����( ��� ������ � +������� 4��� ������� ���� ��� ��������� �� � !;=$��� ������� H��� ���� ������=-$��� ������� ���� ����� ����� ������� �� ���� ?= ��� �� �� ��� ���� �����

�� ��� );� �� ��� ��� ��� �����

0 P !�� ��� �� ��� �� \7� P�

0: ��� \��� P

�0: =)� � \7� P \��� P !��)� �� ��� ��� ); P 5 ��� ���� ���

��� �� $����� '�� �� ���� \7� � \���� �� ��� �� ���� - ���� 0 P 5� +�� ��� �������� ��� ���� -� -K � � � � � -K , ,���� � !�. � ���� , �� ������ ��� ������,0�;� � � � � 0

�:��)

. � ����� \�7� P \�

��� P !��)( �� ); P ! K � � � K !2 =�4 !�� :�

����� �� ��� ��� ���� ��� ���� �� ���� ��� ��� ��������� ������� �� ����� ������� ������� ���� ������� ���� �� $��� �������� H������ *- ��� ��� ����� ��

Page 23: The Art of Computer Programming - Bitwise Tricks and Techniques

< ���������� �������� ����� *� �"

�0!��� 6(����&���!���('���0����� ����&��&���9�%��������� ����&�� ���������� ����!�(������%���%0�������������� ��!

������ ���� !������� '�� �� ������� � ��������� ���� �� ���������� � � ��� ��� �������� ���� �������� �� ��� ���� ������ ��� ����� ��������� � �� ���� ������ ����������

3� ����� �� ������� �� ���� �� �� ������ � ������� � � ����� ��� 1 ����� ,�� ���� . ��� ��� �� �������� �� � ���� * ���� ���� R� �1 S P ,*��.L �� � � * ��� � �P *� ������ �� ���� ��� �� �� �� ��� ��� ���� ����� ������ � 1�� ����������� ���� ���� � ��� ��� ��� ������ �� � � ���� ���� �� � */

�� P ,�� *. L *� ,�.

�� ��� ������ ���� ���� � P 5 ��� * �P 5� ����� � ���� ���� �� , . ���� ���� �$�� � ������� ��� �������� ��� � *� ����� ��������� �� ��� ������������ ���� ��� �������� ������ � 1 �

4�� ���� ��� � ,�. ���@ ������� ������ �� ��� ����� � � Q*� �������� � ������ * �� 5� # ��� �� �������� ������ ����� � ���� �� ��������� �������� ��� �������� ���� � ��� � 5 ��� * ��� � ( ������� � ������ ��� ���� � ���� �������� �� ������ N��� ������ �� P ,,� � Q*. K . L *�'�� �� ���� ,� � Q*. K P ,�K Q*. K P �K ,Q*K . P �� * ���� � � *� >?+�

J����� ���� ���� �� P 5 � ��� �� � � � P *� )� ��� ���� ���� ��������� ��� ����� ������� H������ *? ����� ��� �� �� ���� �� �� ����� ���

4� ����� � �� ���� �� �� ������ � � ������ � � �� ��>� ����� ���� ��� � ��� ������� ���� ����� � ������������ ��� ! 5! !5 � ���������� �5�� �� ��� !� ,�����$����.� )��� � ������������ ��� �� ��������� �� ������������ � P ,���) � � � �;.: ��� ��� ����� � P ,���) � � � �;.:� �� �� ������� *� � 7"5(�� ����� � ��������� �� � P , 55 5 55.:� � P ,5 55 55 .:� ��� ��� �� ����������� � ������� � � ��� �� ��� ������ ���� ���� � P * ��� � P 5� ����� ��� ����� ������� ��� ��� ��� �������� � � ����� ��� ������ � ��

�� P ,,�� ,�K �.. L �. K �� ,��.

)������ ��� ���� � � P ,���) � � � �;.: ���� ���� �������� ������� �� ���������� � P ,���) � � � �;.: ��� � P ,���) � � � �;.:� ���� 2 K + P � ������� ������ ���� * � ����� "* P + �� ����� ��� ���������� 3� ����� ��� P ,�:�?�>�)�:�;�)�;.: ���� P < ��� * P , 55 5 55.:� 4� ��� ����� � ��� � A�������� ������ ����B �� ����� � ��� ���� � �� ����� ���� � ���� �� �3�� ���� ��������� ��� ��� �� � ������ ���������� � ������ � � ������� ���������� � ��� ��� �� � ��������� � K ������ � �������� ������ ��� ��������� �������� ��� �� �� � �� ��� �����$���$����� �������� ,��. ��� ������� � � ��� �( ��� ���� ���������� ��� ,��. ����� ���� �� ��� �� �� ������ �� ������� ��� 4� ���� �� ���� ������� � K �� ���� �� P ,����) � � � �

�;.:

�� ��� �� �� ������ � �������� ������ ��� ��� � � ��� �� ���� ����� �� ������������ �������� �� */ +������ , P � L * ��� ,� P �� L *� � �� �� ������ ,, � Q*. K ,�� � ����� ���� ���� �� � ���� �������� � K �� �� �������������� ��� � ���� � � �� Q*� :��� �� � ��� �������� ���� ��� ��:������ ����

,,� L *. K ,�� L *. K Q*. L * ,��.

�� ��� ��� � � ��� ��� ���� � !�� �������� �������� �� ��� ���� *�

Page 24: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ?

����� ����+ ������0 ��==��!������((( �������0 � ��&-���!�(��&#� �������0!�(��&#� �������������7�0�/��F���'%: ������������������ � �������������# &������((( ���������,/ ����������0�E������/��F

(������� ������ �#��� �� ����� ������� � ������������ �� ��� ���� �� ����� � ������ � ���� �� ���� ���� �� ��� ���� ������� � ���� ��� � ��� ���$����� ������� �� �� ������ �� ���� � ���� �� ��� � � 3� ����� �� ������� �������� ���� �� ������ ��� ��%������ � ������ ��� �� ��� ���� ����� �������� �� ����� ����� �� � ����( �� ����� �� �� ��� � =- ���� ���� �� ��������������� &���� �� ������ ������%��� ��� ��������� �� O�� �� O����� ���� �) , ?*;.� -* 7-*;� ��� �����%���� � �������� �� ���� ���������

)������ ��� ���� �� ���� � ���� �� ���� ��� ��%������ � ����� ��� ������� ���� ������� ���� �� ���������� � ������� ����� ��������� ���$� � !;= �� ���� ����� # ������� � ��������� ���� ����� <$���� ������ � P,�A � � � �)�;.:@* ��� � P ,�A � � � �)�;.:@*( �� ���� �� ������� � P ,�A � � � �)�;.:@*����� �� P ,�� K ��. ��� !;= � 5 � � � <� 1����� �������� � � �� � �������%���� ���� ������� �� ���� �� ������ ����� �� ���������� ������� ������)� �� ������� ��� ��� ����$��� ���� ��� ��� ���� ���� ������� �/

� � ,�� �. L 3� ���� 3 P �&�&�&�&�&�&�&�&�(

� � ,,�L Q3. K ,� L Q3..� �� ,� .

��� ���� ���� � ���� �� �� ���� �� =�� � �� "�K"� � �� � �� ����� ��� ���� �� ��� �� ��� �� ��� ���� �� '� �������� ����� ���$���� ��������� ,����� ���������� ��� �)��� ������� ����� �����. ��� � ���� < � ,"� K -�. P !-� K "!��2�� � �������� � ����� �� :��� �� ���� ,��� ������� <<.�

4� ��� � �� ������� �������� �����"� � ���� �� P �,�� K ��.�!� � ���� �/� � ,,�� �. L Q-.� � ���� - P ���������(

� � ,�L �. K �� ,��.

���� � ����� ����� ��������� �� 8� &� G���N� �� ����� �� ��� �� $����� ��� �

�K � P ,�� �. K ,,�L �.� . ,��.

� ����$! ��������� ,4� ��� ��� ����� ,��. ���� �� ���� ������������ ������� ������� � ���� � ��� �������� �� ������ �� � �� ,,�� �. L Q-.� �.

H������� <<7?" ��� 557 5- ���� �� ����� ����� ����� ������� ��� �� �������$���� ���������� �� �� �� ���� ������ �� ��� �������� ��� ���������� ������� ����� ���������� �� ������ ���� �� ����� ������� �� � ���� � !�

�� �������� �� ��� ���� ��� ����� ������ � ���� ����� �� � � ������ �� ����� ��� � ������ � �� ��� � ����������� ������������� ������ �������$���� � �� ���� ��� ������ ��� ��� ����� � ��������N��� ��� ����������������� ���� ���� ��� ���� ����������� ��� ��� ����� +������ �������� �������� ��������� � ���� ���� �� ��� ���� ������ � ��� � �������� ���� ���$�� �� )�6G ����������� ���� � � A)��� � ���������� ����� ���� 6� ��� �G��� ������B( ���� � ����� �� )� 8� [���� ��� �!� �* , ?;<.� *--7 *;5���� �������� ���� ��� ��� � =-$��� ������� ��� ����� ���� �������� ������� ��%������ �������� �� ��� �� � �� ��� � ����� � )�6G ����������������� ������������ ���� �� ,� .� ,��.� ��� ,��. �� �� �� )4#C �������>A)�6G 4����� # C�������B � ���� ������ �� C� T� 3���� ��� 8� &� G���N R���"������ ����� �� ������ #������ �*+* , ???.� !?57"5;S�

Page 25: The Art of Computer Programming - Bitwise Tricks and Techniques

!5 ���������� �������� ����� *� �"

�(���&��� ��������0���!���,#�� ��( �������(���(%����� ���7�����&�0%��������!����8��(��# � &#���-(��K�0< � )%&�� ��������!���

1 ����� ����� ���� ������� � �������� ���� �� �� �� ������� ��� ���� ��� ���� ������ ��������� ����� �� �� ����� ������ � ��� ����� ��������� �� ��� �� ��� ��� ��� ��������� � ���� ������ � ���� �� ��� 3������ �� ������ �� ���� ��������� �� � ��%����� � ���N�� ����� ����������� 5� �� ��� �� ����� ��� ��� � � ����� %���� �� �� ���� � ��� ��� ���������� ������ � ����� ����� � � ����� ��� � �� ���N�� ,������� �������� � ��.� )���� �� � ���� �� ������ �� ���� ��� �� ��� ���� �� O�������� �����( ��� # �� 6���� ��������� �� ?<* ���� ����� ����������� ����� �����/

, � 3L ,�� -. L Q�� ,��.

���� 3 ��� - ����� �� ,� . ��� ,��.� � ���� ���� �� �� ���N��� , �� �� N��(� ,��� .LQ�� �� �� !

���� � ����� �� � ���� ��� ���� �&� P !A� '�� � �� P 5���� � ��� ���� �������� ���)� � � � � �; ,� ���. �� � ���N��� ��� ������������ - �� ������ ��� �� ���� �� ��� , �� �� ���N��� �� ���� �, �� �� <�K*�

�� ���� # ������ ��� ����������� �� ,��. ��������� ��� �"���� � N������ � �� �� ������ ������ ��� �������� � ��� ������ � N�� ���� �� ��� �� ��� , � ���� ,)�� ������� ?-�. �� ���� ������ ��� ��� �$������ ���������� ������� �� ����� � �� ��� ����������� ���$������ �������� #� ��� ������� ��������� �� ����� ��� ������ N�� ���� ��� ��� ,��. �� ���� %���� � ��� ���N������� ���� �� ���� � ���� �� � � ��� ������ ���� ��� ����� ��� ���� ���������� �� ����� ��� ����� ��� � ����� -$�������� ��� � ������� � ���� ��� ������� ���� �� �� , P ,,A � � � ,),;.:@*� �� ����� ,� P !<R�� P5S � ���� �/

, � 3L ,� � ,,� � 3.� -..� ,��.

��� ������ ���N�� ���� � � �� ��� �� � ���� �, P <� K *���������� �� ��� ���� � ���� ���������� E���2 ��6�!� �� ��� ��� N��$����

��� �� ��������� � �� ������� ���� ���� ,� � , �� R�� P5S� ������� �� � PR�P5S� '�� �� �� ����� � ��������� ��� �� �� � ������� ������%��� ��������� � � �� ������ ������( ������ ������ ������ �� �� ��������� ����

J�� ���� �� ���� � ��� ��� �� ��� ��� ��� 5� �� ��� ��� ��� ���� ������� ����� � ��� ������ ���� �� ��� 3� ����� �� �� ���� � ��� ���� � � �� ������ ��� ������� ,��.� �� ���� � ��� � � N�� ���� �� ��������������������

#�� ����� ������%��� � �� ���� �� ���� ���� ����� )������� � ������������� �� ���� �� ������� � P ,�A � � � �)�;.:@* �� � ��� �� ���� �� P ������ �� P �� ��� �� P =>= ���� �� �P �� � ,���� � � P ?����-@59? ���� P ?��6�-@59?� ���� �������� �� ��� � � ?��>�-@59?�. ���� ����/

,� 3L ,,�� �. � ,,,�� �. � 3.� -..(

�� ,,� .� ,,� *.(

� � �� ,,�� ?>>>>>>>>?. L�.�

,��.

��� ��� ���� ���� ,��. �� V�� ��� ����$��� ���� �� ���� ���� ���� �� �P �� ���� ���� ���� ������ � ���� ���� ���� ����� ����� �����( ��� ���� �� ��� ��� P �� ���

��� ��������� #�� ��� ��� ����� ����� ��� � � �� �� ������ � �,�L�. � ,?>>>>>>>>?L�.� ���� �� � �� � �� � =>=� ��������� �� ��� �����

Page 26: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� !

��!������ � &#��&#��+ �����0 (���7 �� � !���� ����������(��!���!���-:%����

1�������� ,��. ��� ,��. ��� ������ � �������� �� ����� � ����� ���� ��N��( ��� � � ��� ��� ���� � ���� �� ��� ��� ���� � ���� ���� �� ����� ������ ���� �� ��� ���� � ������� � �� �� ��� - �� 0 � - P ,00000000.:@* ������� ��� �� ���� 0 �� ��� �������� �������� � !<� �� ��� ��� ,��. � ,��.�� ��� � � �������� ��� ����� ���� �� ��� ���� 0� 3������� ��� ����������� ��� 0 ���� ��� �� ��� ���� �� ���� ���� ��������( ��� ���� � ��� ��� ����� ��� � �� �� �������� ��������� �� ��� ����� ���� 0 � !<� 8���� �� <$������� � ���� ���� ,� � !<R�� ��� S � ���� ���� �������� � �� ��� ���� ��� ,/

, � 3L ��Q���� ���� � P ,� � 3.� ,� L Q3.� ,�.

,)�� ������� ?=�. ��� ������ �������� �� ���� ����� ��� � ��� ���� ������ ����( � ����� �� ,�. ������ �� ,��. ���� � P -� ������� �� �� P � � ��

1��� ����� ���� � ���N�� , �� ,��. � ,��. � ,�.� �� ����� ���� ��������� �, � �, �� ��� �� ������� ��� ����� � � ��� �������� � ���������� ���� ��� ���� V������ ��� ��� �� � �� �� ����� � � � �� ��� ���� ����� ����� ����� , ��� ���� �� �� � !;= ��M���� �� ���� ������� ��� ��������

� � ����� R,,� � ,. ��� !*?.� ;=S� ���� � P!@* �

!A � � ,�.

��� ����� �� ������� �� ����� �� ��������� !;=$���� ��� �� #�� ��� �� $��� ������� ��� ��� ���� �� ������ ���� �� ����� ���� ����$���$������������� A,� ,K ,,� *.� ,� ,K ,,� -.� ,� ,K ,,� !<.�B ��������

��� �� ���������� 4���� ��� ���� ��� ���� � ��N�� ���� �� ������ ��������� ������� ��������� ��� ������ ����������� ��� �� �� ���� ��������� ��� �������� �� �� ������� ���� ��� ���� ��������

H ��� '� ����� ��� ������ ���� ������� ����� ���������� 4 V��$V����������� �� �� ��� � ���� ��� ��� �� ��� � 4� ��� �� ������� �� � ., ��4. ������ ���������� �� V������ � V������ �� ��� ����� ������� ��� ���������M���������� � ������� ��������� �������� ���� �������� � ��� ���� ��������� ��� � ���� �������� �������� �� ������ �������� ����� ����� ���� ���� � �� �� ������ $��� ������������ � �� � ��� �� ��� � � �� ����� ����� ���� �� ����� �� ���� � ���� ���� � ��� ������� � ������ ����� A���������B O� � C������ ��� ��������� ��� � ������ ��� ���������� �� ���� ����� ����� � $��� %��������� �� �������� � ����� �

6��� � ��� ������� ����� ��������� �� �&���� �� ��� ����� ���� ���� �������� � ���� ����� ������ ���� ���� ������ ,���� �������. ��������� 3������ �� ��� �������� �L�� � ���� ������� !��� ��� ���� ���������� ��� ���� ���N�� !$���� ������ �� '�� ���� ������� ���� �� ������� � ������������� ���� �� ��� ������� ���� ��� .,�. ����� �� ���� �������� ��������� ��� ���������� � !�$��� ����� '������ ��������� �� ��� �� � ��� ������� $��� ����� ���� �� � ������� ���� �� ��� ������ � ��� �

)��� ������� � ������� �� � ��������� ������� �� �� ������� ���� �������� �� � �� �� ���������� ����� ���� ������� ��� ��N� � ��� �������� '������� �� ������� � ������� ���� ���� P =-� #�� �� ����� � � �������������� ���� �������� ���� ������%����

Page 27: The Art of Computer Programming - Bitwise Tricks and Techniques

!! ���������� �������� ����� *� �"

��!��E�((������( ����������+ /����������0 �((�������

1�� ����������$���$��������� ��� ����� ������� ��������� �� ��� ���$����� �� 6� O� 3����� ��� G� H� 4� �� ���� ., . ������� ����� ������ ��� ���� ��� ������� �� P � � �� � ��� ���N�� $��� ����� �� �� �������� ��� ��� 8�� �� ���� ������ � ������� ���� P (: ��� ( �� � ���� � !/

,) � 3L ,� � ,,� � 3.� -..� ���� 3 P !��)- ��� - P ,!� � .�,!� � .(� � ,,,� � ,). ��� !�.� , � (.. � -� ���� � P ,!��� � .�,!��) � .(,: � 3L ,� � ,,� � 3.� �..� ���� � P ,!�=� � .�,!�=) � .(�� ,,:� .� ,,:� ,( � ..� �� �� ,�� (.(� � ,,,- � ,�L�.. ��� !�.� , � (.. � -(,> � 3L ,� � ,,� � 3.� �..(�� ,,- � ,,,:� ,!( � � ( � .. K ,,>� ,!( � .... ��� !�.� , � (.�

,��.

,)�� ������� 5=�. ��� ������ �� � �� �� ������� ������� ��� � ����� !? ������� �� ��� ��������� �� ���� ����� �� � A�������B ���������� �� ���� ��� ���� ��� ���� �� ��� ������� �� � �������� �%���� �� ���� ], �� . ������� ������

# �� ��� �������$�� ��� �� ��� ��� ���� �� � ., �� �� . ������� ����$��� ���������� ��� ��������� �� ??* �� &��� '��� � ����� ������ �� ������� ������ � ���� ,��.� �� �� ����� �� � ��� � ��� ����� �� ,�.�

�� P R��P�,�L Q�;.S K !R��P�,�L Q�).S K -R��P�,�L Q�:.S K � � � � ,��.

��� ��� ��� ���� ��� � ����� �� P �� �� ���� � ������ ,��� ,��../

�������� � ,����� ��"�����.� ���� � ������ ���� $��� ��������� ��������� �� P � � ��� �������� ���� 5 � � � !� ��� P � � !����� R)�� � �����S )�� �� 5� ���� ��� �� �K !� ��� �� �� !� � � !:

�� " � # � � ��

��� RC�� ������S ,#� ���� ����� 5 � � � !:�

( ��� �������� ���� �� �� �������� �� � � ��� 4� �� �� ��� � �� � ������ � ���� � �� !�$��� �� ���. )���� � � ,�� !�=�. � 5 � � � " � �#�

��� R+����� ������ �����S )�� � � �L ,����) � � � ��)��;.:�� � ,)�� ,�.�.

��� R+����� � �� ���S )�� , � 3 L ,� � ,,� � 3. � ,� � �...� ���� 3 P

,!:��) � � � !:

��)!:��).:�� �

�+� R+������ �����S )�� ,� ,,K ,,� ,!�=� � !�... ��� !� � 5 � � � " � �#��*� R3������S 3��� �� ��� �� �K ,,� , � �..�

���� � ������ �� ����� � ����������� ���� ,��. ���� P =- ,��� ������� 5*.�

#����� �������� � ������ ������� � ������ ��� ��������� �� !55=�� 6� )� 2������ ��� ��� ������ ��� ��������� ��� ��� �� � ����������� ��������� � ��� ������ 5 � �� � ����� $��� ����� ������ ���� ��� �������� �� � ���� �� ������ � �������� �� �%���� ��� �� ���������

5 P Q�L ,�� . L ,�� !. L ,�� ". L � � �L ,�� 2. ,� .

Page 28: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� !"

:%���� �����====&���-�� �����====&����(��===��&( (����� &# ��� ���0

���� � P ,���) � � � �)�;.: �� ������ 3� ����� �� ���� P =� 2 P "� ���� P , 5 5 55 .:� �� ���� 5 P ,555 55555555 555.:� 1�� ����� ��������������� � ���� ], �� 2. ������� ��������� ��� � �� ������� '�� �� ��� ���� ����� ! $���� ����������� ���� ��� :�� � � � 2 � 5/ O�� + P "2�!#�- P

���; !

�� ��� !�� 3 P ,!��)-. ��� !�� ��� � P��

��;,� .�=)!:������ !��

� � 3L �L ,,�L Q3. K -.(

,� ,�K �. L Q�L�!�(#� ,L �� $ � ,L ,�� !+.(

�� ,#� ,#� 2.. � ,$ � ,$� 2..(

5 � ,L ,,�L�. K ,,,� 2. L ,�� ...�

,��.

H������ ��� ���� ��� ����� ������������ �� �� ��� ��� ������ ��� ��� �� �� ������� �� ��( ������ �� ���� ��� �� ��� ���� ,� . �� !" � 2# K ! �������� ,��. �� ��� ������������ ���� 2 � ; !� '�� ,��. �� ������ ���������� � ������������� ���� � ������� ��������

$,��� ���� �� ������� ��� ��������� � �� ���� ����� ��� ������%��� ������� ����� �� ����� ������ ����� �� � ���� ��������� ��� ������ #� �������� ��� ������� � ��� �������� ��� ������� �� �� ���������@ # ����������� ��� �� �� ����� �� ����� �� ��� ����� ������ ���������� �� ������ ������ �� � ������ ���� ������� �� ��� �� ���� �������

O���� ��� ���� � �&��� ���� �� � ��%����� ,�;� �)� � � � � ��. � !$���� ��������� ����� ���� � ����� � � & � 5 �� �������� �� ��� ���������� ��� ������������� ������ 6�� ������ �� �� ���� ��� ����� � ��� ����� �� �� ������ ������� ���������

� P ��24 Æ ��24 � 0 Æ ��24 � ��24 Æ 0� ,��.

���� ���� Æ �� ��� � ��� ������� �K���L� ������$�%�$�%����������� ���� 0 �� � ��������� 3�������� ���� ��� ������ Æ �� � �� ���� ����� ����� ��� ������ � ���� ���� �� � �������� ������ ��������( ������������� �� ��24���24 � 0���24 �� ��� ��������� ,4������ ��� ���� ����������� ��� ���� ����� �������� ��� ������� ������� ����� 57 �� ��� �������� � ����������� ������ � ��� � �� �������� � �� ��� ����� �� A,0� �. L B� ���� �������� 0�.

)��� � �� � ��������� ���� � ����� � � �� �� �� �� $��� ������������� �� � ��%����� ,�;� �)� � � � � ��. � $��� ������ ���:��� �� �������� � ������� ����������� ���� �� � ������� ��� � ��������� �� ���������� � !�� '������ ������ ������ ��� !$���� ������ �� ���� ����� ������� � ��M������ ��� ���� ������� � ��� ��������� ��� ���� ����� �� ��� ��� $��� ������������ ,��� ������� ".�

'��� ����� � ������ ������� � ������� ',�. P �� ���� �� ���� ������� ���� � ����� �� �� � P �;� H������ - ����� ���� �� � $��� ������������ �� �� � �� �� � �������� � ���� ������� ��� ������� � ��� ������� ������ �������� � ���� �� $��� ������ 1� ��� �� �� ����� ��� ����� � ������ ������ �� � �� ��� ���� � ����� ������� ' �

Page 29: The Art of Computer Programming - Bitwise Tricks and Techniques

!- ���������� �������� ����� *� �"

��� � �����7�����+ &# );!����

#�� !$���� � ������� ����� ,�;� �)� � � � � ��. ��� � ��%����� � A���� ����B,6;� 6)� � � � � 6�. ��� A������B ,7;� 7)� � � � � 7�.� ������ �� � ���/ )��� ����6; P �5� ��� 7; P ( ���� � & � ��

6 P

�������6�24 & 6�24�6�24�6�24�6�24 K 0�6�24 � 0�

��� 7 P

�������87�247�24� � � P ��24 Æ ��24�87�24� � � P 0 Æ ��24�87�24� � � P ��24 Æ 0�7�24� � � P ��24� 0�7�24� � � P ��24� 0�

,���.

���� 8 P ! � Æ � �K��� ��� 8 P ��������� ��� ����� ��� �� ���������� Æ �� ������ 3� ����� �� ������� ��� � ����� *$���� �����/

� 6 7�; P � �5� �) P �; L�! �5� �: P �) K ! �5� !�> P �:� � � !�? P �: K �> �5� � <�@ P �?� - �-� ;� <�* P �? K �@ �5� � -� ;� !<�A P �*� - �-� ;� <� ?� !<

,���.

,4� ���������� ���� ����� �� ������� -�-7?� ����� ����� ���� ����� ����������� ��� � �A P ��� 5� � 5 � � � =5 ���� ������ ���� <$��� ����������.

�� ����� � ����� � ��� ������� ���� ������ ��� ���� ��� ����$��� ����� � P �; ������ ��V����� ��� ��$��� ���� �� ��� �� ���� ���� �� ��� �����

,���� �� $�%�� � &'���� �� (�������� �����) ��� ��� (����� �������������� ��

� (� , � � � �:�)�;.: ���� (�� �� ��� ������ �� (�� �;� ���� �� 5 � 9K���6

'����( '� ��������� �� & �� ��� �� ��� ���� ����� � 7 P � ��� �� ��� �������� ��� �;� �� � � 5 � 9 � 6� #������� ��� ����������� ����� ��� 7 � �� �� ��� ������ � ��� � ���� ������� �� �M��� � ���� ���� �� �� ��� �� ����� ��� � ��M������ ��� ��� ����� ���� �� �� ��� �����

%�����# -� ��� �������� � � ������ (� ������� (� � &'���� �����) ���

��� ��� �������� ��� ����� �� ����� ��� (�� �� ',�. ������� �� �� ��(������

��(�� �� (��� �� �

%�����# �� �� '(�� �������� ',�. ��� (� ������� (� �� '(�� (��������

����� ������� ������ �� ��� ���� �� � � � ,���� � !�. ������ ',�. � ',�.,���� � !�. ��� 5 � 9 �

'����( � ���� �� �� ����� �� ���� 6 P �5� � � &� ���� ��� ��� ������������ �� ��� �;� �� ��� 5 � 9� �� ���� ���� �� ���� ���� �� � �� ,���� � !�.������� �; � �; ,���� � !�.�

+������ �� � ���� �������� �� �������� � �� � ������� � ��� ������H������ ? ����� ����$�� $��� ������ � ��� ��������

'��,�. P !� R���� !�=)P � S� ���� 5 � 9 � ��� 5 � � � !�=)� ,���.

Page 30: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� !;

E����#�( �������&���# (�0����!7��(&�� �!�������

�� ����� � ��� � ����� �������� ���� �� ��������� R8� )� 4���� T�� ����$� �N�� ���� ��� � �� �������� � � ����� �� �� �� � , ?**.� -"?7-- �S

)��� ���� 6 ��� ������ 7 �� �������� ����V� ������� � � ��������� ���� ���� �� �� ������� ��� � ������ ��� ������/

,���� �� "�� !��� P ���L�!��!�� � �; � :���� �� �� '(�� (�������� �����)

�����

:��� P �� � �L �!�=� � !�=�� P 5 � � + � 6�� ,��.

��� 9 � 5 ���� �!���� � 7� ,8�� 9 ��� 5 �� �������� ������ � ���������.

���� ���� ������ ���� �� ���� 7� ��M���� ��� ������� ��2��)4 � � � ��� ��� ���������� ',�.� ���� ������ ������ � � ���� �� � �� ���������� �� �� N���

'����( ��� ��� � ������ � �� �� ���� 2 P 5� 1������� �� � ����� �� �� P�� K ��� �� ���� �� ��������� ���� �!��� � � 7� ��� �!���� � 7�� 3�������:��� P :��� ' :���� ����� 6� P 6� & 6�� ���� �� ���� 7�7� ������� ����� �,�� K ��. L �!� � !�� ���� ���� ������ �� ��� ���� �������� 5� ��� �� ����7�7� ���� ���� �� � ���� ������ � ���� ���� � �� ���� 7� P !7�7�������� ����� � �������� H������ !! �������� ��� ���� ������

4� ��� ��� ���� ���� ��� � � ������� ����� ], �� �� . ������

(����� .� �� P � � !�) �%��� '(�� (�������� ����� ���� ������� �� ���

5 � � � !� ��� ��� ���� � � ����� ���� ��� ��� ������

'����( � ���� �� - ������� ������ �� ���� �6�� � ! ��� 7� � !:��)� #�� �

O���� ' ���� 9 P � ��� 5 P 5� ��� ������� �!�;�� P !� � ,� ���� ���� �� ,�� ��� � � � !� ���� ����

�!�� !�=:� � !�=:�:� � � � � � !�=2��)4:�� �� :�;��

'�� :�;� ��� ���� �� ���� ! � � ��� ������ � ����� � !( �� , � ! �� - � � �� O���� ' �� � �� ���� !� � , � 7� � !��)( ����� !��) � , �

! � �� '�� ���� �� �������� � �� ��� � � !� ���� ��� ������ � �� � �� ���

��� ���� ��� ���� � �� � ��� ����� ������� �������/

%�����# ,� �� P � � !� � !) �%��� '(�� (�������� ����� ���� ������� ����� 5 � � � !� ��� ��� ���� � � ����� ���� ��� ��� ������

'� ����� O���� ' ���� 5 � 5 �� ��� ����� ��� ������ ��� �����], �� . � ��� ����� � ��� ����� � ��� ���������� �� ����� �

(����� �� �� ! � ( � ) �%��� '(�� (�������� ����� ���� ������� ���

('(�� ��%����� �� ��� 5 � � � !� ��� �� ������)> � (

������ ���� ��� ��� ������

'����( #����� �� ����� ���� ���� �� - ��������� O�� 3 P � �((� ��� ����������� - � � �,3K .�� ���� 6� �� � ��� � �� ���� ! � )

: ,3K . ���� ������� +�4� ��� ��� � O���� ' ���� 9 P 5K3� ���� 9 � ( ��� 5 5� ���� �� (�3K ����� � �������� ��� ��� ���������� �� ���� �� L �!� � !�� �� ����������� ��L �!�=� � !�=�� ������� ���� �� �� ������� � ��� � ���� ���� 5 � �� � � 3��� ( � � 5 � � P 5 K +K �� ��� ����� � A���B ������� � 5 � ����� ����

Page 31: The Art of Computer Programming - Bitwise Tricks and Techniques

!= ���������� �������� ����� *� �"

@!AB?B������(�&����� ����%����������%�� ��!���&���� ��,�-�9� ��!�(!�� ����������0�! ������( �������

������� ����� �� �� ���� ): ,3K .3: � ( � 3( ������ �� ���� ��� A����B ������

� 5 ��� �� �!���� P !�� '�� ���� O���� ' ���� �� � ������������� ������� ��������� � ������ ���� !� � 7� � !2��)4�:�

%�����# /� �������������� (� ������� ���������) ����� !�) ��*����� ], �� .����� �� �� '(�� (�������� �����

'����( �� 8��� =* � ��� � ����� ��������� @!AB?B ,6����� #��� O��$������ ?*!.� C����� )������� ������� ���� ��� ���������

,� ,,��. ��� !�. L �� � � ,,0,. ��� !�.� , � (. ,��.

������� � P �� ������� P (: ��� 5 � � � !�� ����� ��� ��������� � P,!�=� � .�,!�=)� .� � P !��),!�� .�,!� � .� ��� 0 P ,!��� � .�,!��)� .�,)�� ������� !"�.

#� ���� ����� ��� ���� ����� �� �� ��������� A1���� � ���� ���� ����$��� ������ ��������� ���� �� �� ����������� � ���� '�� �������� ��������� ����� �� �� ���� ������( �� ��� ��� ���� ������%���� ��� ���������� �������� ������� �� ���������� ��� ��� ����� �� ������ ����� �����������B

C����� #�� ���� �� ���� ������� ������� ����� ��� � �� �� ���������� ��� ����� ���� � � ������������ +������� � ����� �� ��� � ��$��� ���� �N����� � �� ������� ������$����������$��� �������� �� �� � �� �

)*+ / ��� ������� ��� $��� ������� 2)� � � � � 2 � ��� $��� ����� �����8 R5S� � � � �8 R!� � S�� �� ��� ���� ��� �����������

2 � 2� ) 2�� 2 � 2� Æ 2�� 2 � 2� � 2�� 2 � 0�

2 �8 R2� ��� !�S� 8 R2� ��� !�S� 2�,���.

���� Æ �� ��� ������� '�� ��� ������� ��� ���� 2� �� ��� ���� ���������� �������� �� � ������ ������ �� ����� ���� ����� ��������� ��� ������� �� � ���� � �� ����� � 2 � 2� � ������� 2 ��� 2� �� �������� �������� ��� ���� �� �������� �������� � � ������� ��� ������ ������� ���� � A����� ������B���� ������ �� ��� ����� ����������� ��� ����� ������ �� � ���������� ����������� ��� ��� ��� ���������� ��� �� �� ������ ��� ���� �� $��� ������� �� � �� ������ 2)� ���� ������ ����� �� �� �� �,�� 5.� ��� �,�� ,. ������� �������� ��� , ����������� ���� ���� ������� 4��� ��� ������� ������ 2) �� ������� ���� $��� �� �� ',�.� &���� � ������� ',�.� �� ���� �� ��� � �������� �� ��� ���� , ���� ���� 2) �� �%�� �� ',�. �� ����� �,�� ,.� � 5 � � � !��

(����� .�� "�� ; P !�� � (���� '(�� !�� ���� ���� �������� � � )�� ��*����� �� ����� � � �< ����� �� �%������ ��� ����� �������� ��) �� ��

'����( O�� P !:���

� �� ���� � � !:����:� � H������ !- ��� ���� ��� ��

���������� ������ ��� �������� � ������� ����� �� � ������ � ��� ������� �� �� ���� � ��� ���� ���� � ������ ��� C#6 �� ���� ��� ���� ����������� ��� ���� ���� �������� ��� �� �� ��� ���� ����� ��������� 1� �� ��������� ��� ���� �� ���� �� ���� ���� ���� ����� ��� ����� ' �

# �������� ���� ��� ��� ��:��� ���� ������ C� ��� �� ������� �� ���������� � � ���� ������� ; �� ��� �� �� �� �� ���� ������� ���� �� �������� � '�� ��� � ����� ��� � �� � ���� � ��� � �����/

Page 32: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� !*

������,�(���,������-�#� ������������# �������!�"���# �������0��� �(0����!�=����&�(��# ��&(!����� ������������7 �(���

�������� #�� $0�&�0

(����� ��� � (���� '(�� !�� ��*����� �� ����� )> � ( ����� �� ������ ���

('(�� ��%����� �� ��� 5 � � � !�) �� ( � ���

���,�� K � . �3K

!� �,3K .� � !� 3 P � �((�� ,���.

'����( #� ������� ��� ��� ��� � ������ C� ������ �� ������� !;�

O���� ' ��� ������� C� 2� C�� 2� ��� ���� ��� ���� �� ��� ��#� '������ 2� '� 6� ������ ��� T� �� 6���� "������ ����� �� �� #��

��0� , ??*.� -!=7-"?� ����� �� �� �� ��� � 6� ����� �� "������ ����� ��

�� #�� � && , ??=.� --!7-; �6��� ���� ��� %�������� ����� ,��� �������� !=7 "5.� 3� ����� �� ����

�������� �������� �%��� ], �� . ����� �� �� $��� ������� �����@ +�� �������� ������� ,"�. ��� !� � ��� ��:���� ������� ,"�. � �!� �� ������������������� �� ., �� �� . �����>� ���� ������ �� �������� ����@

�� ����������� �� ����� ������ J�� ���� ��� ���� � ���� ����� �������� ��� �������� � ���� � � ������� &���� � ������ �� � ��� � ������� : � ������ # � $ ���� ������ �� �� �� # �� $� ��� ���������� !������ �� ����� � ������� ���� �� �� ������� ����� ��������� �� � �������� ��� � � : (�� ���� ����� �� ���� ��� ���

= P �$ � #�� $ � ���� # � ��� ,�� .

���� #�� $ ����� ���� ���� �� � ��%����� � , ���

# P #; � #) � � � � � #� P $� � ���� , 5� ,���.

���� ��� �� ����� �%���� � �� �������� 3� ����� �� �� ���������� �� ��)������ !�"�; ���� ������ � � ������ � O���� ���� �� ��� A�������B

� ��� ����� � ������� �� ��� � ��� �: � � =-� �� ��� ���� �� ���������� ������� ��� ��� �� �� %���� � ��M���� ��� ���� �� ��� ����� �� ����������� � ���� ������� � �������� O��

6R#S P �$ � #� $� ,���.

�� ��� ��� � ��������� � ����� #� � � # � : � ���� ��� � ����� � �������� � ���� ���� ��� � ��M���� �� # ������ !�"�;H� ��� �� �� ��� ��� ����������� ��� ��/

�������� . ,)���������.� &���� � ������� ����� ��������� �� ����������� ���� 6R#S �� ,���.� ���� � ������ �������� ��� � ������ = ���� �������� � �� � ����� ��� ��

.�� R������ �N��S )�� =� � ��� ! � *� ,�� ��� � ����� ������ ! �� ��� ������� ������� # � = � ����� ����� ����� �� 6R#S�.

.�� RG���@S � ! P =� ��� � ������ ����������

.�� RH������ ������ ������S O�� # �� �� � ����� � = +!� )�� ! � ! &�#��=� = & 6R#S� ��� ���� �� ���� C!�

��� � ������ �� ����� ������� ,�. ���� � ����� � ���� ���� = �� ������ �(,��. ���� ������ � � ����� #� �� ,���. �� ������ �� =� �� ��������� �� �( ���,���. ���������� ������� � ������ ������� ���� C" � ���� �������� �!��

Page 33: The Art of Computer Programming - Bitwise Tricks and Techniques

!< ���������� �������� ����� *� �"

��"����# !���'(���(%����� ���( �������������0 � ���# ����������0 �� ����� -��� �-� &���===!�����0 �� ��!� ���� �-�%&�� ����===

�� ��� ����� # ������ C �� �� ������ ���� : P �5� � � � � � � �� ���� � =-� ��� ��� ! �� ���������� � ��������� �� ��� ������ >,!. P

��!� �# � !�� ��� ��� ���� ���������� ���� ���� � � ��� ���� ���� �� =� ���6R#S� J����� ���� ��� ���� � 6R5S� 6R S� � � � � 6R � S �� �������� � ��� ��,����������$ � ��� ����� ������� �� ��� ����� �� )������ *� ��� �� ��� �$������ ���/��� A������� B � ������� ����� �� �� ������ � ��� # � 6R#S� �� �� ���� �� ��� 3� ����� �� � P " ��� ��� ��� �� �5�5� 5� � �5� !�5�� �� ����6R5S P ,5 .: ��� 6R S P 6R!S P ,55 .:� ��� � ��� ��:������ ����� ��

����������

��

)��� C" � ��� �� �� ������ ��� � ����� � =+!� �� �� ��� ��� � � �������# � �,>,=.� >,!.. �� ������ ��� ��� ���� ��� ������� ��������� �%��� ������ ������ ���� �� ����� ��� � ������ �� ����/

����� . ,)���������.� ��� ����� ��� � �� ����� �� ������ � ��� ������������ ��� 6R#S ������ �� �������� 6DR ;� K <#S� ��� ������ ��� = �� ����� �� ������ ,( ���� ������� � �� ��� ;� ��� ! �� � ����������� ��� ���

�� : ��) ,� 7 ��� ����������� � � �'�(��� ��) !�� 7 � � �'(��� A�� 2 7 / -���� �: ���� ����� ��� ������� ����� ������ �� � �� 7��� ���� ;����� � � �'�( C��� '��(D��� ��� �;�� � � *���� ���� � ;�� � � �'�C�D(�� ���� ������� �� � �3��� 1 ���� �� !�!��� � � � � ��6 ���� ��� � � � ��� ���� � 1 �'�(��� �� ,�,� � � �C�D6 ���� ��� � � � �� ���� � 1 �' (��� : ���� ��,�! E 7 ��� ���� � � �� � 1 �' � �(� ���� � � ��� ���0 ���� E 7 / -4 �� �1 ��

��� ���� ������ ���� �� ,� K ?�.�=� K *�� '� �������� ������� " ��� �$����� # ������ C ���� ����� ����( ��� ���� ��������� ���� ���� ���� ��,"6K-�=��!���K .�K,;6K !�=��;���K-.�� ���� 6 P

��� �6R#S�� ,'��

� ����� ���� ����� �� � �� �� � �� ���� � ����� ���� �� ���� � ��������.H������ "! ������� ������ ���������� � ������ ���� ������� ���������

��� ���� � �� ���$���$ ��� ������

����������� �� ��� ������������� +������� �� ������ ��� ,� ��@.��� �� � ������ 4� ���� ���� ��� � ��� �� ������ �������� ���� ���� 5���� �� 1�� � ��� ���� ������ ��� ��� � ���� ��� �� �� ������ �� ������������������ � ����� ���� ��� �� �� ����� � ���� ��M���� �������

)������ �� ���� ���� � � ��� �� 0�� ��� �� ���� �� ������� � �� ������� � ��� 4� ��� �� � ����� �� ��� � �� 55� � �� 5 � ��� 0 �� 5� '�� ������ ���� ���� ������� �����> �� ���� - ������� � �� ���� " ������� � �� ���! � 0� ������ !- � �������� )��� � ����� �������� ����� �� ���� ����� ����� ���� ���� ������ ��������� �� ���� �� ���� �� �� ���� ��

&���� ��� � ������ �� � � ��� �� 0�� �� ������ � ���� �� ������� � P � Æ ��� ���� ����� �������� Æ� � � P � �� ��� � P � �� ���� � P � ��� ����

� P ' ,� � ��� � � ��. ��� �� P '�,� � ��� � � ��.( ,���.

Page 34: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� !?

!�(���(������� � ��0�� &���=��0�� &���+ ��������� � ���9�%���:%��& 8��7�(��

����� '�� ��� �������� ' ��� '� � �� ����� �� ������ �� Æ ��� ��� ������������������� 4� ���� � ������������ ���� ����� ' ��� '� ���� �� ��������

)������� � ����� �� ���� ��� �� 0� P �� � 5�K � ��� ���� Æ �� �� ��� ���$����� � �� ������ �� ��� ��� ����� ������� � �� ���� "� ���� �

5 �� 55� K �� 5 � � �� 5� ,���.

�� ���� � P �� � � � ���� ��� ���� ��� �� � ' ��� '� �� ��������� �

' � 555!55 !5 5!!!!! ��� '� � 555!5 5!55 !!!!!� ,���.

,���� �� ����� A�����$�����B � ����� ���� � �� P ����� � �� P �.��� ������� � )������ *� �! �� �� ��� �� ������� � ��� �� ������ �� ���� �

� P ,� � � . ,�� � ��.� �� P ,� � ��. ,�� � � .( ,��.

��������� � ��� �������� ' ��� '� �� ,���. �� ������������ �� ��� ����� �������� ������ ���� �� ��� ����� �� ��� ���� ?,' . K ?,'�. P = ������

1� ��� ���� ���� ��� �������� ��� ����� ������� ������

K �� 55� 5 �� 5 � � �� 5 ,��.

���� �� ��� ����������� ��������

' � 55 !555! 55!!!!! ��� '� � 5 5! !5 5!!!!!� ,���.

��� ���� ��������� ��� ���� �� �� ��� ������ ��� ������/

� P �� � ��� �� P ,� � � . Q� � ,���.

�� ���� �� ���� ��� �� ������� ���� �����������@ 3������� � �� ��������� �� �� � !- ������� ������ ������� ���� � ���� �� ������ � � ���� 3������ �� ��� ������� � �� ��� �� �%���� ��� �� � �� � ��� ������� ��� ��������������� �� �

�� P ��� �������� �� �������� ���������� �����

' � ,�� � �

��� �

� � �

��. P �� P �� P '�,� � ��� � � ��.(

��� ��� ����������� �������� ' � ��� ' �� ������ ��

' � ,� � ��� � � ��. P '�,��� � � ��� � .� ' ��,� � ��� � � ��. P ' ,��� � � ��� � . ,�� .

���� ��� ���� ���� ����� �� ' ��� '�� )��� � � �� ��� ���� ����� � �����$����� ������ �� �

�� P Q� ��( ���� ��� ����������� �������� ��� ��� �� ��

' � ,� � ��� � � ��. PQ' ,Q� � ��� Q� � ��.� ' ��,� � ��� � � ��. P

Q'�,Q� � ��� Q� � ��.� ,���.

��� ����� ��� ���� ����� �� �������� � ����������

C������� ��� � �������� ����� ���� ���������� ���� �� ����� ������������ �� �%���� ��� �� ��� ����� ���� )� ��� !- ������� ����� ����� �� �� � ���������� �� ��� �� � ����� �� ��� ��� ���/

+ ��� � + ��� �� + ��� ��� �� � �� � �� �� �� 55 5 5 55 5 5 55 5 5 55 5 5 55 5 5 55 5 5 (� �� 5 55 5 5 55 5 5 55 5 5 55 5 5 5 55 5 5 55( ,���.0 �� 5 55 5 5 55 5 5 5 55 5 5 55 5 55 5 5 55 5 �

Page 35: The Art of Computer Programming - Bitwise Tricks and Techniques

"5 ���������� �������� ����� *� �"

��%��%!��# !�����0���9�%���:%��& 8��7�(�����9�%���

�� ������ � ������������ �� ���� ������� �� � ��� ������������ � ����� ���� 3� ����� �� � � P K � � P 5� ��� 0 P � � ������������ ,���. �� ������ � ��� ��� ��� ,��. �� ���� �� � ��� �� + ��� ��� ���� ��� �� ���� ���� "� ���� ��� �� )� �� ������ ���� ������������ ,��. �� �� ���� �� ���� ���� � ���������� ,���.� � ��� "$� ����� �� ��� ������� ��� �� ����� ���� ���������

#��������� ���� ������� �� ���������� ������� �� ���� ��� ��� ��� �� 0����� �� � ���$��� ������ +������ ��� ���$��$���� �������

K �� 55� 5 �� 5 � � � �� 5� ,���.

���� ���� 5 ��� �� � ���� �� ������������� � N��� ��� ���� ��� ��� ' ��� '� �� ��� %���� ��M���� �� ,���. ��� ,���.� ������� � ������ �� ��� ��� ���� ������� ��� �� ������/

' � 5! !!!!! !5!!!!! ��� '� � 5 5 5 5 � ,���.

#�� �� ���� ���� ������� ����� :��� ��� ���������� ������� � ��� ���� �� ,���./

� P � � � � �� P �� � ��� ,���.

# �������� ������� ����� ���� ������� ����� ��������� ������� � ��� � ��������� � P ��� ���� ��� ���� � ������ �K � 5�� � �� ��������� �� �� ,���.�

)��� ������%�� �������� ��� "= ��� ������� ����� �� ��� !- ���� �� �������� '�� ������ ���� ����� ���� A!$���� �%���� ����B �� � ��� ����� ��%���� ���� � ������ 3��� ���� �� ���� � ����� ���� �� �� ���� ���� ��� ������������� �� ����� � ����� ��� �� ��������� ������������/

+ ��� ��� + ��� ��� + ��� ��� �� � �� � �� �� �� 5! 5! ! ! !5 !5 ! ! 5 5 55 5 5 55 5 55 5 5 55 5(� �� 5 55 5 5 55 5 5! 5! ! ! !5 !5 ! ! 5 5 55 5 5 55( ,��.0 �� 5 5 55 5 5 55 5 55 5 5 55 5 5! 5! ! ! !5 !5 ! ! �,C������������ ,���. �� ���� �� + ��� ���� + ����� ��� ��� ��� ����� ��� �� � � P ����. ���� ���� �� ���� ���� � ����� ���� �� � �� �������� ����/

+ ��� �� + ��� �� + ��� �� �� � �� � �� �� �� ,, ,Q, ,Q, ,, 5 55 5 5 55 5(� �� 5 55 5 ,, ,Q, ,Q, ,, 5 55 5 ( ,��.0 �� 5 55 5 5 55 5 ,, ,Q, ,Q, ,,�

����� � ����� �� � ��� � � ��������� ������� ��� ������������ �� ���� ������� �� ������ �� �������� ���� � �� ���� � �����$���� �� �� ��� �� ,���.� 3������ �� � �� ��

K �� 55 � � 5 �� 5 � � �� 5� ,���.

����� �� ��� ��� ������� �� + ��� ��� ���� �� ����� ����� �� 952+, ���� ����

' � 95 55555 52 +5 , ��� '� � 9 55 5 25+ 5,� ,���.

Page 36: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� "

!�'!����%7�(�� (�0��O������-��F����-���!���( (�0��!�#&���"����������"��������!�(�������0�������+ !�(���(������� ��&(����# 7��������!�����0< !%+��0 -��� � !���

3�������� �������� � � ����� ��� ��� ��� �� � ���� ���� ��� ��� ���� ����� ���� ��� �������� � ��� ���� ��� � ����� ,��� ������� "<.� )�� �������������� � � ���� � ����� ���� �� �������� ���� �� ��� �� ��� ������ ������ ������� ��� ���� �����

�� ������� �� ���� ���� �� ���� ����� ��M���� ��������� �� �����$�� ��� ����� ��� ��� :��� � ���� � �������� ��� �� ��� �������� 3� ����� �� ������� ���� �� ������� ���,�� �. �� �� �� ���� 4��� ������������ ,���.� ������� �� ��� �� �� � P � � � �� P ,� ��.� ,�� ,� � ��..( ��� ��� A����� B������� ,���. ��� ������� ���� � P � � � �� P �� � ��� + ��� ��� ���� ����� ���� ���� -( ���� � ����� �� ������ �� ������ ������� � ����� ��� ���� ������ �� ���� ����� �� ���� �� ���� ��� � ����� �%������� � ��� ��� ���,�� �.�#�� � �� ��� ���,�� �. �� ��� ���� � ����� ��� ���� ��� ��� ������� �� ���� ������������ ����� !� ;� ;( ����� ,���. ���� ����� ����

��� ����� ��� ��� ��� ��������� ���� � �� �� ���� ��������� ���� �� �������$�� ��� ���� ���� ���� �� T�� O���������N �� ? *� R)�� ��� #������� +����������� �� O� '������� , ?*5.� <-7<<� ;"7 *<�S +������ ��� ����� �� ���A����B A� ���B ��� A������B ������� ��������� � �� � 5� ��� !� O���������N������ ��� ���� ����� ��������� � ���:�������� ���:�������� ��� ��� ��������� ����� �� ��� �� ��������� ��� ��� ��

� �5 !

5 5 5 5�

�! 5 ! ! 5 !

� �

� �5 !

5 5 ! �

�! ! !

� � �

� �5 !

5 �

�! ! 5 !

�� �

� ,�� .

3� ����� ��������� ��� ������� ����� ���� ���� ��� ����� ������������

5 �� 55� ! �� 5 � �� ,���.

���� �� � ������� �� ��� ������� ��� ����� ��������� ����/

� �� � �� P ,� � .,����.� � �� � � �� P ,� �� .,�����.�� ��� � �� P ,,�� � ��. ,,Q� ��..,� Q��.�

,���.

1 ����� � ���� ��� �� �� ��� ���� ����� �� �� �� ���� ����������( �� �������� �� ��� ���� ����� ������ � P �)�: � � � ��� ���� ���� �� �� ����� �� ��� 0� )��� ����� ������ �� ���������� � ��������� �� ��� ����� ������

� P �) �: � � � �� ��� �� P �)��:� � � � ���� ,��.

���� �� �� �� ��� �� ������ 4� ��� � � �� ���� ��� ����� �� ��� ���� ���$����� �� � � ���� � ������

� P �) �)��: �:� � � � �� ��� ( ,��.

���� ��� � ��� ��� �� ���� ���� ����� O���������N ���� ���� ��� ��������� ��� � ��� ��� �� [��� �� ������� ��� ���$����� ������� � ,��. �� ������������� �� ��� �� �� ������� �� �� ������ ������� ������� ��� ��������

Page 37: The Art of Computer Programming - Bitwise Tricks and Techniques

"! ���������� �������� ����� *� �"

����&�� &����!� ����7�� �!� ��������G�"(����!�(���� ���� �������.������&(��0���-�#� ���&���# � ��������( �������

������������ �� ��� ��������� '������ ��������� �M� ���� ������ ������ ������� � ������ � ���� ��� ��� � ���������� ������� ����� 3� ����� �������$� ����� ������ ���� ��� � A��� ����B �� ������� ��� ��������� ������� ,��� ������� -".�

�� +����� < �� ��� ������� �� �������� ���� ������� ���� ���� ��2��� ��� H��� '��� � ���������� � �������� � �������� ������ � �������������� 5 ��� 4� ���������� �� ������� ��� ���� ��������� ���� �� A��� ��� ����� � ����� ��� ���� �B ��� �� ���� �� ., �� ��4. ����� ���� ��� �������(��� ����� ���� �� �� �����N� ��� � ������� ������� � ��

(4 �����������

� ������� � ������ � � ��N�(4 � ������� ���� �� ���� ��� ������� ����

�� � ����� � ����� ������ � �� ��������� R)�� ���������� ��������� "������

* , ?**.� <57<!( � �� 2� ��� H��� '���� C� I���� ��� H� 0�: ���� ���� #�����

������ � , ?**.� ??7 !*�S '������ ��������� ���� ����� ������������ ����8�������� ���� ��� ��������� �� ������ �� ���� ��� ���� �������

� ������ �� ��� ���� ���� ���� ��� ����� 3� ����� �� �� ������� A�����B�� )������ ;�!�"� ���� � ������ � � ��%������ ��� ��� ���� � ���� � �������� ������� ���

7

� 4

: 5 �

* 8 7�

P

���7

��7� ��77

�7�� �7�7 �77� �777

7��� 7��7 7�7�

,��.

����� ���� P 5� ,J��� ������ �� ����� ��� ���� �� ������ ��� ��������������. ���� �� �� ���� �� ���� ������� �� ����� �� � ��� ���� � � ����� �� ��� ����� ,����� �� ���� �� � � �P .� � �� ��� ��� ��� ,����� �� ����� � � � �P .� � �� ��� ��� ��� ,����� �� ����� �� ��� ,�� . K � ����������� ����� ������ .� ������� � ���� � �� �� ����� ���� ����� � �� � ����� ������ ��������

)��� � �� � ����� ���! ������� ��� ���� ���� � ������ ���� ��� �� $���� ����� ��� ��������� ������� ��

7

4

:

5

*

8

7�

7�P

���7

��7�

��77

�7��

�7�7

�77�

�777

7���

7��7

7�7�

77��,�.

���� P 5� ,4� ��������� ���� �� �� ������ ���� ������ �� � ���� ����� ������ �� �� ��� ���� �� 5 �� ! �� < ����� ����. 8���� ��� ������������� ��� ���� �� ������ �� ����� �� � �-��� ����� ��� ��������/��� ���� ���� P � �� ����� �� ���� ��� ��� �� �����( �� �������� ����������� ���� ���� P� ��� ������� � ���� ����� � "� ;� � � � � ��� �� ���,F.�

��� ����� � � �������� ���� �� ��� ��� ������� ��� ���� ������ �� ������ �� ��� �� � !� ��� ���������� � ������ ���� � �� �� ��� ��� �� ��� ��� -( ��� �� ��� ���� ��� � � ������� �� �� � ��� ���� ���� � �� ����� �� ��� �

��� ����� � ���� � �� ��� ������� �������� ���� �� ���� � ���� �� �� ����

,� � �. � ,�� .� ���� � P � L��( ,�.

Page 38: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ""

�������!�(� &���# ��#!!��� ��������((�-�� ��!!�� ������+ � ���� ��!!�� ��

���(��"������&P����������� �����#�(�� ��0�������������&�(��#�������7 �(������� ��!!�� ���������==

���� %������� �� � ������ �� ��� ������ �� ��� � � !)=�� � #�� ��� ��� ��� ��

� � ,�� . ��� � K ,�� . ,��.

���� � �� ����� �� ����� ��� ����������� � ���� � �� � � ���� ������

R� � !�� K � � � K !�� � S� ,��.

������ �� � ���� ��� ����� ��� � !)=�� ������ ��� ������� � ���� � �������� 3 �� ����

,� � , � 3.. L�, � 3. P ,,�� 3. � .� 3 ,� .

���� 3 ��� J����� ���� ��� �������� ��� � ��� ������ � �� �� �� �������� :��� ��� ����� ��� � !� "� � � � �

G�� 8�� ����� ����� �������� �� ��� 2��G� ������ ,[� � +� ������ ������ ?<5.� ��� ������� ���� ��� ����� � ������ ������� � ��� ��� ����� � ��������� ���� ��� � �� �� ���� � �� �� ����� ������� � ���� - �� ��� ������������ ������� � ����� & ��� �� ���� & � �� ���� �� � ������ � ��������

�- P ������ � & � � � �� P �,� L�&.� ,��.

����� � ���� ��� � ��� � ��������� ,)�� ������� -=�. 4� ��� ������ ������ � ,� . ���� 3 P �,� L�&. �� �� �� ��� -�

)��� � ���������� � ���� ������� ��� �� �� ����������� � ������ � ��$���� ���� ���� ������ ������ �������� �� ��� ������� ���� ����� ������ �������� � RG� 8�� ��� C� H� ��:��� #�,� �� , ?<-.� ""<7";;S�'���� )������ ��� [N� ������� R#�,� �0 , ?<<.� !;"7 !=!S �����%���� ���������� � ���� ���� � ��� �� ������� ������ ������ �������� �� �������� ,��� ����. ������� ����� ����� �� ��������� ��� ���������� � ��� �������� ��� � �������� ������%��� ���� �� ��� ������� �����

C��� ���� �� ������� ���� ���� � ���� ��� ������� �� �� ���� �������� ���� �� ���� ���� �� �� ���� ��� �� �� ���� �����( ��� ����������� ���$����� N�� �� ��� ���� � ��� ����� 4� ��� ���� $ �� ��� !����� � #���� # � $� ��� $ �� �� ���� ��� � # ���� # �� $� ��� ������� ���� ������� ������� � ��� �� � � ���� �� ��� �� ��� ���� ���� ����� % �� �� ����� ������ ������ ������� � # ��� $ ���� �� ����

#�� � ��� $ �� � � ��� �� � � % �� �� ,��.

)������ ��� ������� �������� ��� ����� ����� ������� ��� ������� ����� �������� ���� 6 � ��N� �� ��������� ���� %��������� � ���� ����� $/

@$� ��� ��� � $ �� ����� , � @$ � .(

A$� � ���� � ��� �������� ���� 6 , � A$ � .(

�$� � , K � .$��� ������ ���� , � �$ � !)=��.�

� # � $ �� ���� @# � @$ �� ��� ��������� � ������ J��� A$ �� ������ ���� ��� ������ ������ ������� � � ��������$���� ����� @# ���� ���� $ �� ��������� � ����� #� #�� �� �����

�$ P�

�!��� � $ �� %�� ,��.

Page 39: The Art of Computer Programming - Bitwise Tricks and Techniques

"- ���������� �������� ����� *� �"

3� ����� �� ����� �� ������� ���� ���� ��� ������� ��� ��� ����/

��,��.

H��� ���� ��� ���� ��� �� ���� ��� ����� ���� �� ����� �� ��� ���������� A ��� � �����/

$ P B 7 ? C D E F G H I

@$ P 555 555 55 5 5 55 55 55 5 5 5 5 5 5 5

A$ P 5 55 555 55 5 5 55 5 5 55 5 5 5 5 5 5 5

�$ P 5 55 555 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5

J����� ����� � ��������� AB P - P 5 55 ������� ��� ����� ���� � �������������� � B �� � � !� "� -� ;� =� *�� #�� �G P 5 5 ������� ��� ��������� G ���� A ����� �AG� AC� AB� P �5 � 5 55�� 1�� ��� ���� ����������� �� ���� ��� ������� $ �� A$ �������� ��� � ����� ��� ��������/

�. � #� $ �� ��� ����� ���� A# �� � ���������� � A$ �� 6�

��. � ����� ������� ���� ��� ���� �� �� � A$� ���� �� � ���� �� ��� �����

2����� ,��. �� �� ������� ����� � ��� ��� � # � $ ��� A# P A$ ���� A$ �P @$�

J�� ���� ������� � ����� ���� ����� $ � ��� ���� ���� ���� A$ � 6/

���7

��7�

��77

�7��

�7�7

�77�

�777

7���

7��7

7�7�

77��

��

�� �

� ����� �����

���

,��.

� � ������� ��� ���� ���� �� �� ��� ����� ���� ���� � ����

$; � $) � � � � � $��) � $�� ���� A$; P A$) P � � � P A$��) P �� ,�.

����� ����� �� � ������� �� ,��.( � ����� �� I � F� C �� � ���� �� ,��.���� E������ ������ ���� ���� 5 5 P AI P AF�

��� ����������� � ������ � �� �������� � ��� � J� � � ����� � � 6����������� ������� �� ��� ������� $� �� ��� ��� ���� � ,�./

� P 555 55 5 55 5 55 5 5 5 5 5 555 55 5 5

J� P _ B ? _ _ C C _ _ 7

H������ -? ����� ���� � �� ��� �� @$� A$� �$� ��� J� ��� �� ������ ��., . ������ #�� ���� ����� ��� �� �� ����� ���� ������� :��� ������ �����$���� �� ������� ��� ������ ������ ������� � ��� ��� ����� ������� %���� �/

�������� 1 ,.���� � ������ ���� ��� .� )������ @$� A$� �$� ��� J� ������� � � ������� $ � �� ������� ����� ��� � � � � � # ���������� _ �� � �� ������� �� �� ������� ���� @_ P A_ P �_ P 5� ���� � �������������� ��� ������ ������ ������� � � ��� ����� ������� � ��� �� �������� P _ � � ��� � �� ��� �� ��M���� ����� 4� ������ ���� ��� �� ��� �� P � � ������ ���� ���������� � � � � � ��� ���� �5 P � �

Page 40: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ";

�����# 8������"����P���(��7�0����� ��(�����#�&�(�� �(��.���%���(���� 0�!�#

1�� R3��� ������ �������S � A� � A�� ��� 3 � �,A� L �A�.( �������� ���3� �,A�L�A�.� ,)�� ,��.�.

1�� R3��� ��� �������S )�� � � ��L �� L�, � 3.� ���� 3� �,� L��.�1�� R3��� A��S )�� � � ,,A�� 3. � .� 3� ,J�� � P A�� � � �P _�.

1�� R3��� W� ��� W��S ,4� ��� ���� ��� ����� �������� � � ��� � �� ���� ��.� � P A�� ��� W� P �( �������� ��� - � �,�� L ,, � 3. � .. ��� W� PJ,,,A�� -. � .� -.� )��� � �� � � P A�� ��� W� P �( �������� ��� - ��,�� L ,, � 3.� .. ��� W� P J,,,A�� -. � .� -.�

1+� R3��� ��S )�� � � W� � @ W� � @ W�� �������� � � W��

����� ��� ������ ������� � ��� ��� ,� .( ������� ;! ��� ���� ��� ���� ����

)������� ����� ��� � �� �� ���� �� ��� ����� �� ���������� ���� � ������%���� ���� T� I���:����� ��� 3� ���� � �� � A���������� �� ��B � ������� ���� P 5/

5�4 �*� 57� � 7 8�* 7�� *8���5 54 :�

��

��

��

��

��

��

��

��

��

��

,�.

G��� � ������ �� ���� ��� �� ��������� � "� � � � � ! � � ��� �������� ����(���� ��� �� ���� ���� ����� ��� ���� ��� ����� �� ��� ���� '� �������� ��������� �������� !� -� =� � � � �������� � ������ �� ��� ����� ����������� #�� ������� ����� �� ���� ����� ������� ���� �� � ���� �� ���� �����> ��� ���� ������� �� ���� � ����� �� ������>������� �� � ��� ��� �� ������ � ������� !�=� 5� � � � � �� � ��� ���� � ������� -� !� !5� � � � � ��� �� � �� � ������ � ������� � ,)�� ������� ;"�. ���� ��� ���������� �� � �%���� ��� ��� � ��������� �� ������� ���� � ���� ������ �� ����� �������� �� � ������ ��������

!

"

#

$

$ �

%�

%

��

& '

!

"

#$ �

$

%�%

��

& '

���� ��� /� $���� � &$� ������� ��� �������� ������

$%���� �� ��� �#������� ������ 8����� �� ������� �������� �� ������������� ���� ���� ������� ���� ��� � ���� ��M���� V���� ��� ��!������ !���� ��� ���������� ����� � � ���$H�� ����� ������� ���� �� ���������� � ������ ����:������ ��� ������ ���� ��� ������ � � ��� �� ��� ������� ���� ���� ���������� � ���� ����� ���� ��� �� �� ���� ��� ��� 3� ����� �� ��� ���� �� ������ ��� ==� �� 3��� " �������� �� ������ .� B� 7� ��� ����� ������ �� ������ �� O���� 6�� ��� ��� �� !������� / ���� ���� ������ ��� ���� ��������� � ��� ��� � ��� �������� O��� �K �� � �� ��� � �� ����

Page 41: The Art of Computer Programming - Bitwise Tricks and Techniques

"= ���������� �������� ����� *� �"

���(���(�����(((��������&���7��#��(#���������(�(�����(((�������(�0�� ���������((���������0����&������ ��!&�,�0�����!����0���&��������&������ ��!& �#��!�0���&������ ��!& �#��!

4� ��� ��M���� ����� �� ������� �� ��M���� ����� ������� 3� ����� ����� ������ ���� �� 3��� " ���� . ����� �� ��� ������ J����� ���� � � ��� ������������ ��� ��� ������ �� ������ ������� ��� ����� ��:�����( ���� �������$�������� ����� �� ��� ������ ���� � � A���� � ��B ����� ����� �� ��������

6��� � H�� ���� ������ � � ��� ������� ����� �� �� �� ��� ������ ��� ���� 3� ����� �� ����� � ��� ��� ������ ������ ��� ��� �������� ������( ���� ����� B ��� �� ��� �� � ������ ����� � ��� ��� ��� ���� ���� ��� � �B� ������ ����� �� �� )� � 5 � ) � <5� '�� H�� ���� ����� ��� ����� ��� ���� ����� �/ � ����� ? �� ��� �� ��� ���� ���� � ���� �� ����� � ��� ���� ������ ?���� �� ��� � �� ���� 3������� ���� �� ���� ���� � ����� ��� ==�

��� 6�� �� 3��� "� ���� �� ���� � ���:���� � ����!�������� �� ��� ����� �������� ������ ���� ������ ������ � � ���� R����� �������� � ��� ������ ��� ��� ��� ��������� �� &� )������ �� ��� �� � *55�� ��� ���� ������ ��J� �� O����������� T� '� ���� ��� +� 3� &���� � ������ ����S

`����������� � ��������� ���� ������ �� ��:����� ���� ��� ���� ���� ���� ���� �� ���� ����� ��� ��� � �� <( ��� <�( ��� ����� �� ��� ) ��� �������� )� ��� ����� �������� ������� ��� ������ ����� ��:������� �� � ��� �� ���,�� ��. P �,� � Q����K �� � ���.� �,� � Q���� � �� � ���.� ���� ��:���� � ����� ����� ����� �������� � ������� ���� �� ��� ���� ��� ��� ��� ��� ���

��� ��� � ��� ��� �� � � ������ �� ����� � �� � ���� �� ���� <5Æ� 3������ �� ��� ��� �� �� .� B� ��� 7 �� 3��� " �� ��������� � ?5Æ� -;Æ� ��� "=Æ���� ���� "=Æ$-;Æ$?5Æ ����� �� ��� �� � ���� ������� �� ���� � ��� � ������������ ?5Æ ��� �� �� ���� ����� #�� �� ���� ��������� �� ���� � ������� ������ ������ � ����� �� �� �� � ��� ����� ������ �� � ��� ���� ���� ��� ���������� ,��� 3��� -.� ��� ����� � ����� ��������� �� �� ���������� ��� �� ����� ���� ��� � ����� �� ����� � ����� � � ��������� �( �� �� ����� ��� ������� ��� ����� �� ��� ���� �%���� � ��� ������ � ���� 4� �� ����� !����"�� � ������� ���� �� ��� ��� ��� �������� ������� � ���

������ � ���� ��� �� �������� �� ��� �������� ����� 3�������� ������������ �� ����� � 6����� 6�������� R��� 3� 8����� ��� 6� 6�������������������� �� #�� �&* ,!55".� "-;7"; S� ������� � ��� ������ 3����������%����� �E��� ������� �� ��� ��� ��� ��"�/������ ������ �E���� ���� �

E�) P � E�: P � � E�> P !� E�? P �"� � � � � E�� P ,� .��)E�� ,��.

H������ �!�<7"- ��������� ��� 3�������� ����� ������� �� ����� ���� ���$�������� ������ � ��� �� ������ ���%�� � �� ��� ��

� P E�� K E�� K � � �K E�� � ���� �) -- �: -- � � � -- �� -- 5( ,��.

��� E� -- �� ����� E� �K!�� '�� ������ � �� � ��"�/������ � ���� � ��������� ����� �� ������� �����/ �%��� ������� �) ������� ������%�) ������%�) ��

-���) ��� (� ������� ���*���� �� ��� ���

� P E�� K E�� K � � �K E�� � ���� �) .. �: .. � � � .. �� .. � ,� .

3� ����� �� - P ; � P E�@ K E�: ��� �! P �" K P E�? K E�)� ���������������� ��� ���������� � �� �������� �� � ����� ���� � P � � � �>�:�)�

Page 42: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� "*

�0����!�( �#��!:%����!�0�� !���

���� ��� /�� ������������ ���� �������� ������������ ��� �������� ������

' ������ � ��� ���� � ������� �� ��� �����

�� �������� ����� ������� �� ����� ���������

� (� �� ��,��� $&**&" *# �&#"-& �.)/&" �� �#0&'1&" �2��

�������� � 4,�. P�� ��E��� ���� �� ��� � �� � ��� 3� ����� �� ��� ��

��� ����3�������� ������������ ����� � � ������� ������� � - ��� K ;/

� - P 55 5 55 �< P 55555 �! P 55 - P 55 5 5 P 55 555� " P 55 5 5 �* P 5555 � P 5 ; P 5555 P 55 55 � ! P 5 5 5 �= P 55 55 5 P 5 = P 555 ! P 5555 5� P 5 555 �; P 55 5 P * P 5 55 " P 555555� 5 P 5 55 �- P 5 5 ! P 55 < P 5 5 - P 55555 �? P 555 5 �" P 555 " P 5 ? P 55 5 5 ; P 555 55

#� �� ��� ���������� ������ ,��� -� 7,�. ��� , ..� �� ��� �� ������ � ���������� � ��� �� ������ � ��� ������������ ��� �� ���� � ��� ����� � �������

��� ��������� �� ��� �������� �K � ��� ����3�������� ����� ���� ���� �� �������� ������� � �� ����� ��� � ��

,�5 .� P �55� ,�555.� P �5 5� ,� 55.� P �55 � ,� 5.� P ,��.5 �,� 5.K P �55� ,�55.K P �5 � ,� .K P ,��.5� ,��.

,)�� ������� ;-�. '�� ��� � ����� !$���� ����� �� ��� �� �� ����� ����� �/

� � �� Q�;� � � � � ,� ) .� ���� � P ,�.:(

� � � � ,�L ,�� ..(

% � �� � � ,,� K .� !.( ���� % P ,�).:�,��.

4� :��� ��� �� �� ��� ��� ��� �� ��� ��� ���������� �K �� ��� ��� ���������

Page 43: The Art of Computer Programming - Bitwise Tricks and Techniques

"< ���������� �������� ����� *� �"

#�� ��� ����� ��� �����/ # ����3�������� ���� ��� �� �������� �� ������ � ��� �������� �� ���� � ��� ���� ��� ����� � ��� ��� �������� �� ���� ���������� O���� �� ��� �������� � +� <� %� ��� L� � A�����B A������B A�����BA�����B ��� A�����B � � �� ��� ���� �������� �� � ����� �� � �� �����

�� P �� !� �� P �� !� �� P ��K� �� P ���( ,���.

���� ��� P �� ��� � �� ��� P ,�5 .� P �� ��� A����B �������� �� ������/

�) P

���K� � �L P (

���� � �L P 5�,���.

3� ����� �� 555) P 5 55 ��� 5 55 ) P 555� ���� ��������� ���� ��� ��� ������� ���� ��� ���� ���� � ���� ���� � ��� ������� ���� ��� �������� � ���� ���� 5�

� �� ������ ��� �� ��� ��� �� ���� ���� 5� ��� � �� � �� ������ ������������ �� ���� ��� �������� �� � <� +� %� ��� L �� � ������� ���� � ��,���. ��� ,���. �� ������ ���������� ��� � �� ���� �� � ��� ��������� ,)��������� =5�. 3� ����� �� ��� �������� � � �� ��� �� 555 �� ��� ��� ����/

��

��

� � � �

��

� �

��

� �

� �

����

��������

������

������

������

����

��������

�������� ��������

����

,���.

��� ���� ��� � �� ���� ������� ������� �� � ���%�� �� ������� ������� ����� �� � ������ ��� ���� ��� � ,������� �� � �� � ���� 5� P 5� P 5 ��� � P ) P �. �� ��� � ���%�� ��������� �� ������ � ������ ��������� �� �������� �� �� � ���� ��� ��� �� ,�� �.� ���� � �� �� ������� 4��� � �� ����������� � ����� ��� � ����3�������� ������ ��� �� � ,�� �. �� � ���$�$ �������$������ ���� ����� ����� ���� � ?5Æ ��� ���� �� �� ,5� �.� �� ����� � ������ �������� � ,�� �. �� ,�� �.� P ,��� � K Æ�,�..� ,�� �.� P ,��� � K Æ�,�..�

Page 44: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� "?

�#(���.�!�(���� ���� �������&��!�� 0������.�#��������'(�������0������0

,�� �.� P ,��� �KÆ�,�..� ,�� �.� P ,��� �KÆ�,�..� ��� ,�� �.) P ,�)� �KÆ),�..�����

�,�. P R�P5S� �,�. P �R�P5S� �,�. P 5� �,�. P �R�P S(

Æ),�. P

�����,�) � ��.R�) L ��P5S� � �L P (

����,�) � ��.R�) L �� P5S� � �L P 5�,��.

,)�� ��� � �������� �� ���. '������ ��������� ��� � �� �� �� �� ��� ����������� �� � ��� ���� ����� 1� ��� ���� ����� �� ��� � � �� ����� ��� ����������� �� �� ����� ������ ������� ����� � A������ �� �� ����B ����������( ��� � ���������� ����� �� ���������� �� ������ �� ��� ��� � � ����3�������� ������ �� ����� ���� ����� ��� ����� ;�

�#7#�

�����

�������������

������

������

������

������

������

�������

�������

�����

�����

������������������

����������

����������

��������

��������

��������

�������

,��.

������ �������� ���� �� �� ���� ������ ���� ��� ���� ������� ��� �������������� ���� ���� �� �� �� ��� ���� ����� ���� ������� �� 4��� ����� ������ ���� ���� ��� ��� �� ��� �� ��������� ���� � ���� �� ���� �� �� �����

��� ���� ��� �� ��� ������ ��� ������� �� ������ ���� ������ �������� �� � �������� ����� � 5� ��� �� �� �� � A����B � A�������B ������������ ���� � �%��� ������ � ������ �� �� A���� ��B ��� ����� ��� ������������ ������� ��������� ������� ���� ���� � ��� �� �� � ���� ������ � ��������� ��� ������ 2������ �������� � ��� ��� ���� ������ ����� ��� � ������ ���� �� ��� ��� ������ �����( ��� ���� ���� �� ����� �%������� �������������� � �� �� ��� ��� ������ ���� �� �� �� ��� ���� E#� ����� �� 3��� ;,�.�

4��� ������� ��������� �� ��� ������� ������ �M���� ��� A���������B ������� ��� � ��� ���� � �������� ���� ���� �� �������� �� � �����/

,�. ,�.���� �� /�� ������ !������ ��� ����� ��������

Page 45: The Art of Computer Programming - Bitwise Tricks and Techniques

-5 ���������� �������� ����� *� �"

�����������#�&��&(���-������%��0�&�����0%��0�&��D%��0�&��+ � ���0%��0�&��?%��0�&��+ � ���%��0�&����'( �(0&��((�(� ����!�����������-�#�� 0�!����� ��0������������( ������ ��0������6�0������������0����7��F

���� ��������� ��������� �� C� #� I����� O� +���� +� C��� ��� &� H� [���R ��� ������� .���� ������ ��� �� , ?;*.� !! 7!!?S� ��� �� �������� ��

�����,!. P ! L �,! � . L ,!� . L ,!� . L ,!� .�� ,���.

���� E! � � ��� !� � ����� ��������� � � ��� ��� � � ������� ��� ������ !

���� � �� �� ��� ��� O�� �� ����

!� P ! � � !� P !� � !� P !� � !� P !� ,���.

� ��� $���� ����� � � ������ !� ����� � ����� �� ��� ����� �� ���������E!�L,!� �!�.� ��� ����� �� �� ����� ���� ��������� ����� ������ ��������� � ���� ��� ����� � �� ���� ����� � � ��� ������� �� ��� ����� ���� � � ������������ �� ��� ����� 4��� ����� ������������� ,���. ����� ��� ��

�����,!. P ! L ,!� L!� L!� L!�.� ,�� .

����� ��� � �� �� �������� �� ! L ,!� � !� � !� � !�.�H��� ���� ��� �� A���$���������B ���� ����� �� ����� �� ���� �� ���

���� ��� ����� � ������� �� � �� ��� ����� A����$���������B ���� ����� ������� �� ���� ��� ���� ������ 3� ����� �� ��� ����$�������� ���� �� �� ����������� � � ���� � �� � ������ ! ��� �� ������� �� !��� ����� �� �%���� ����� ,!�.� �� ���� � ����� J����� ���� �� � �� ���� !�� P ,!�.��

# " � " ���� ��� � ������� �� �� ��� � ���� � ���� ������� �������� ���� � ��%����� � ��� ������������� � ������ ���� ������� �/ ��� ������ ���� ���� �� ���� ,K ������� ����� � �� ��� ����� �� ���� , ��� ��� ������� ��� ����$�������� �� ���� ����� ���� ��� ��������� ������ � ��%����� �������� !2;4� !2)4� !2:4� � � � ���� ��� �� ��� ����� ������ ����� !2;4� ����

!2�=)4 P ',!2�4��� !

2�4� � !

2�4�� � !

2�4� � !2�4� !

2�4� � !

2�4��� !

2�4� � !

2�4�� . ,���.

��� ' �� ��� ������� '�� ��� ������� � ���� ����� ��� 3���������� ����������� ����� �� ���� ���� 3� ����� �� ��� 6���� &���� ��������� T���+������� ���� � O�� �� ��� �� � �� ?*5� ��� ������� ���� ��� ����� �������� �� �������� ��� ��� �������� ���� �� ��� ���� ������������ ���� �������� ���� ����� ����>� ������ ��� ���� � ������ ��� ������� �� � ����� � �� �F ,)�� ������� =*�.

���� �� !@): '�� ��� �������� � ���� ����� ��� �� ���� �� !@): ��M����" � " �� � � ��������� 6��� � ���� �� ����� � ��� ���� � ���� ����� ����� ���� ���� ������ ������� ���� ���� �� ����� � �������� � �� ����������3������� � ���� � �� �� ���� ����� ���� �� ��� ��� �� �� ���� �� �������>��� ���� ����� �� :����� �� �������� ������ ���� ��� ���� ����� � � �����

3� ����� �� � ������� � ������N��� � �������� ��������� ����������� ���� � ������� ���� ���� ��� � � A��������B ������� ����� ������ ������� ��� ���� � ��� ������ ���� ��������� � ��� ����� �� �� ���� ���� ��� �������� �� ���������� � ���� � �� ��� �N�� )���� ������ ���� ������� �� � ��������� � ���� ��� ��� ��������� ���� G� C������N R. !���� #��� #������

���& , ?==.� ; !7; "S ��� ��������� � - � - ������� '�� ��� � � ��������� �������� � ���� �� ��� V��� ������ �� ��� �� ��� ������ ������� ���

Page 46: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� -

�����((�������7��# ���������0-�� ����������-�� ����������� (�

���� �� ?��������� ��� � = ���@���F� 4�4 � ������ �� ����������� ������� � �������� 'G@���H������ ���� ���������� �����(

���� ��� ������ 3� ����� �� �� ���� ��� � ��� � ��� ���� � �� � ��������� ������� � �� ������� ��� � ��������� ������ �� ������� � ���� � ���# ���������� �� ����� �� ��� �������� ��� �� ��� ��� � ���� �� 0� &��

��� C� 4� 8� R�� �� , ?<?.� ";?7"*"� *;?S� ����� � "� " ��������� ����������� � ������ � �� �� ��� ��� ���� ������ +������ ��� �������

',�����������������������������. P �,(,���� � � � ������� � � � ����.� ,���.

���� ( P �� � �� ��� � ����� "* ������������ ��������� � � ��� ���� /

���� �� ��� ,���.� ��� ���� ',���� ��� ���� ��� �� ��� ���� ��� ���. �� ���� ����� <5Æ ������� ',���� ��� ���� ��� �� ��� ���� ��� ���. �� ����$������� ��������� ������ ����� ���� ��� ����������� ��� �� ���� �� �������

4��� ���� � � &�� ��� 8� ����� ���� ��� "� " ��������� �� ��������� ������������ ������� � ��� ������ �� � ����� ����� ���� �� �� ��������� ��� 3������� ���� � ������ ������� � ����� �� ����� ������ � �� ��� ���� �� ���� ���� �� �������� �� ���� ���� � ���� �� ����$�������� � ��������� 1� ��� ���� ���� �� ���� � �������� �� A������� ��� ���� �M ��������B � ���� � ��� ���������� �� ����� �� 3��� =� ) ���� � ������ ���������� �������� �� ������ ����� � �� ��� �� ��������� ������������

,���.

�� ��� "* ����� ������ �� ����� ���� ��� ������� ( ��� �� ��� ����� ���� �'�� ��� ����� � ����� !;� ,)�� �������� *57 *!�.

�� ����� � ��� � ��� ���� � � �� ����� ��� �� ������ ���� �������� ����������� ���� �� ��"� � ���������� �� ��� ����� ���� ��� � ��� ���� ����� ������ �� ��� ���� ���� � ��� ��������� �� � ��%����� � ���� ����������� � ��� ���� �� ��� ����� ���� � � �� �� ����������� ����� �� ����� ���������� / #�� ��� ����� �� � � � ��������� �� ����� � ������ � ��� �������� ���� ����� ������� � ���� ���� ���� �� ��� ��M���� ����� � �������������� ����� ��� � ���� �� ��� �� ������ ��� ���� ����� �������� � A������B ���A�������B ���� �� ��� �� �� ���������� ������� R��� #� C����� �� .��

�0 , ?*5.� -=7 =5S� � �� ������� ���� ��� ���� ������ � � ���� �� � ������ ������� � ���� � ��� ���� ��� ���� ������� ���� � �� � ����� ��� � ��������� ������� ,4� ��� � � �� ������� ����� ���� ������� ����� ��� � ��� ��������� ������������ � � ��� ��� �������� ������������ � ������.

Page 47: The Art of Computer Programming - Bitwise Tricks and Techniques

-! ���������� �������� ����� *� �"

�7��(���#����� �����(��&���0�����&"�����(������ �

���� P 5 ���� P ���� P "

,�. ,�. ,�.

���� ��� /�� ��������� � � �������� ��

#� ������� � ������ � �������� � ������ ��� � �������� ��� ������$������� ������ ���� ��� ���� � ��� � ����� ���� � ��������� ��� �������� ��)� O���� �� �� �� �+ , ?*!.� *7 5( �� �%���� ��� � ������� ��� ���� � ������ ����� ������� ��� � �� ������� �� �� '����� 2��G� ������ ,6������ ?=?.���� ���� �� �� ��� � �� � � ��������� ���� ��� ���� � ��������� �������

',���� ��� ���� ��� �� ��� ���� ��� ���. P ,� ,���������.. � ,����. ,���.

�� ���� ����� ���� ��� � �� ����� � � !�! � �� ��� �� ��� ���� � "�" ������� �� ���� �� ���� ���� � ��� ����� ���� � ���$���� ��������� ���� �����

3� ����� �� ��� !; � "5 ������ � � +������ ��� �� 3��� *,�. ��� ������������� � ��� ����������/ ��� ��� ��� � ��� ����� ��� ��� ���� ��� ��� �������� ��� ����� ��� ��� ��� �� ��� ��� � ��� ��� ��� ������� � ,���. �� ������� 3��� *,�./ )���� ���������� ������ ��� ������ �� ��� ���� ����� �� ��� ������ ��� ���� ���� � �� ������ ��� ���� ��� ��� ���� ����� 8���� 3��� *,�.��� �� � ��� ����������� #�� ��� ����� ��� ��� ���� ��� ����� ��� ���� ������ � �� �� ���� �� ���� -� )�� �� ��� ��� ��� � ��� �� ������ ����� ���� -=�

#� ���� 8 K4 � ���������� �� ���� ��� ��� 8 �4 ������� ���������� ����� ����� � ��������$��$��������� ������� ��� ����� � ��� ��� � ��������� ����� H������� *= ��� ** ���� ���� ��M���� ���������� �� �������� ������� ��� ������ ���� ���� �����

1 ����� ���� �����$���� �� � � ������ ����� ��� ������ ��� �� ����� �������� ��� ���������� � � ������� 4� ��� ����� � �� ���� :�� A�� ����B��� � ������ �� � ��� ����� ��� �� �� � ����� ��� �������� �� ���� � ���� ������� � ���� ��� �� ����� � �� ����� ���� �� ��� �� ���� ������

4�� � ���� ��� �N��� ��� ���������� �� ����� �� �� � �� ���� ���� ���������� ������� ����� O���� ������ ���� �� � ����� � ���� � ��� ���� ��� ������� ���� ������ �� ������� ��������� � ����� ���� � �� �� �������"�� ��� ' ��� ���������� ��:����� �� ��� ��������� ���������� ��� ������,��� � ��� ������ #�� ����� ��:���� ��� �� ��� ���� ���� � ����� ��� ������ � ��������� � ������ ��� � ��:����� ��� �� ��� ���� ��� ������������������� � ��� ����� ������ �� � �������>�� ������� ���� ����� ����� ���������� ' ��� ���������� ����� �� ��� ���$������� ��� � � �������� ��� ����� ���������� �� ��� ����$������� ��� �� � �������� �������

Page 48: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� -"

���������!�(# �������

���� P ; ���� P 5 ���� P !5

,�. ,�. ,.

�� �������� ��������� � <�$�����F� �������������

�������� ��� ������� �������������� H��� ��������� ������ ��� ��������� �� ��� ���� �� ��� ������ +�� � ��� ���������� �� ���� �� �� �!�� ����������

3� ����� �� ��� �� ��� +������ ����� ����������� ��� �� ���� ������ ������ ���� � ��� ����� � ��� � ��� ����� ��� ��� ����������� ������� ���/

� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

#

$

% �

&

' ( ) " * +

,���.

G���� ��� �������� ������ � 3��� *� ���������� �������� �� ��� ���( � � ' � % � � � ,� �� ���� ".� * � " � ) � + � $ � & �

)������ �� ���� �� ��� �N� ��� ���������� � ���� � ������ �� ��������� �� �� � ����� #�� ����� ���� �� ��� ��� ��� �$��$� �� ��

� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

#

$ %

&' ( ,��.

��� ��� �� ���� �� ���� �� ���� # ��������� � ��� �� ��� ��� �� ���� ���� ���� ' ��� ( ���� � ���� ���� & � ��� ���� ��� ���������� '

��� � ���� � � �� �� �������� H������ *? �������� � ����� � ����� ������������ � ������ ���� ���� � ������� ��� ����� ��� �� ��� ��� �������� #�������� ��������� ��� � �� �� �������� �� ��� V�/ 3� ����� �� ����� � �������� ��� ��� � ���� ���������� ��� �������� � ��� ��� ��� ������� �� ��� ��� ��� ��� ����� ������ �� ����� ��� ����� � �������

Page 49: The Art of Computer Programming - Bitwise Tricks and Techniques

-- ���������� �������� ����� *� �"

��� 0����������� ����������(�((�������&�(���#�&�(��������� ���������&�����# ��7�====�0 ����������====�����F����(���E��Q���� ��7 ���!P&(��������������0���F�����

$2������� O���� ���� ��� �� %���� ��� � ���� ������� �� ���������� ����� � ������ ���� �� ������� �� ������� ���� ����� ���� � ������ 2�����$ � � ������ � ������� �� ���� �� � ���� ��� ����� �� ��� � �� �� A�������������B>��� ��� � ������ ����� ��� � ������ ��� �� �� � ������ ��������

�� ������� ���� �������� ��������� �� ��� ����� +������� ����������,�� �. �� ��� � ����� ����������� ������� � �������� ����� ��� � �� ����� ���� �/ #� ������� � � �� ������ � ���� �� ��� ����� ��� � �� �������� � �� ���� ������ 6�� ���������� �� �� �� ���� �� ��� ��"� ��������%��� ���� �� ������� � �� ��� ���� � ������ ���� H���� �� ������� ������������ ,�� �. ��� ,��� ��. � ��� � ��� ���� �� � ��� K �� � ��� P � H��� ���� �� ������� �� ��� �� ����� ,�� �.��� ,�� � �.��� ,�� � �� .��� ,�� �� .���,�� �.� H�������� ��� ����� ���� � ������� � � ��� ������� ������ ���� ���� ���� ���� �� ���������� �� ��� ���� ���������� ������� ����� ��� � ����������� � �� ��� � ��� ���� � � � ������N�� �������� ,)��� � ����� �� ������������� �� '� G� #�� ��� ��� J� 4���� �� ���� ����� %�� , ?< .� - 7-*�.

+������ � ���������� ���� �,,. P��,,.� �,,.

����� �� ����� ��� �� , �����

�� 5 �� � 4� ������ ���� ��� ���� ������� �������� ���� � 5 � , � � ������� �,5. P �, .� ��� ����� T���� ���� ������ R+� T����� ���� ���������

� , <<*.� ;<*7;?-( 1� ��� ��� ����� ��� ���� #�� * , ?5;.� <"7?<S ���������� ���� ���� ���� ������� ��� � ��� ���� ��� ������� �� �� ��� ������ ������ �������� 4� ��� A������N�B �,,. �� ����� �� �� ���� � ��� ����� ����������� �( ���� �� ������ �� ������������ �� ����� ��� ������ ���� � �� � ��� ������ ������� ���� � �� ������ ���� ������N����� ������ �������� � �� ���� ��������� ���� �� ��� ��%����� � ������ ������

����,�,,.. P���,,. K )

:�� ��,,. K ):��� � 5 � , � � ,��.

��� ���� ��� �� ������� � ���� �� � ��������� �� ���� �,,. ���� ������ ����� ������� ��� ����� � � ���� � ���� ��� ������N�� ���� ����� ������� ����� � ������� ����� �� , ����( ��� � ���� ��� ������ ��� ������N����� � ��� �� � � �������� ��� ������ ��� ������ ���������� ���� ��,,. � 5 � , � ��

3� ����� �� ��� �%������� �,,. P !5 ��� !@, ��� �,,. P 5 ��� !@, ����� ��� ����� ��� ������N������ ����,�,,..� ����� �� ,!5� 5. ���� , P 5� ���� :���� ��,!5� . ���� , / �55< ��� 5 ��� !@, P 5�;� ���� �� ������� �� ��� ������ ,!5� !.�, ?� !.� , ?� ".� , ?� -.� , <� -.� � � � � ,!5�� .� ,!5� 5.� �� , �������� ������ ����� ��� �5!-� �5"=� �5-5� �5;*� �5=!� � � � � �?*=� �??!/

,���.

��� ���N���� ����� � ���� � ������� �� ���������� � ��������� �� ���������G,�. � ���� �( � ����� ��G, 5. P � � � 555555 555555 � � ���� G,?. P � � � 5 555555555555 5 � � � �� ,���.� � ��� � ���� �� � ��

Page 50: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� -;

8������� �! ���-�#��%0��� �(0����!===

���� � ��� �� ������ � ������ 7� ��� G ������ ��� ���������� ������� � ������ ������ �� �� ���� ��� ����� �� � �����

G P 7 � ,7� .� ,���.

+������ �� ���� ���� �� ������ 7 ���� ��� G ������ �� �����/

7,�. P G,�!�'.�G,�!�'�).� � � � �G,� K .

P G,�!��.�G,�!��=).� � � � �G,�.� ,�� .

J����� ���� G,�!��.�G,�!��=).�� � ��G,�!�'. �� ��� N�� ������ ������� ���������� �� ����� �� ���� ��� ��� ������� J����� ���� ���� ��� ��� ����� ����&��� ���� ������ : ,�. �� ��������/ ���� ������ ��� ��� �� : P 7�,7� .��� 7 P : ,��� ������� "=.� ��� �� ���� ��� ����� �� ���� ���� � �����

+���� �������� �� ����� �� ��� ���� ���� ���� ���� ������ ������� ����� ���� � � ������� ��� ������� ,� 3� ����� �� ��� � ���� ���� �� �� ,���.��� �� ������ �� ��� �%������ ,��!5.: K ,�� 5.: P � ������� � ����� �������� �������� ������ ���� ,�� �. ���� � �� � ��� � ��� �� � � ��� ����� �����,�� )

: � �� ): . ��� ������ ��� � ����� � ��� �� � � ,�� )

: .:�-55K,�� )

: .:� 55� � 5�

�� ����� � ���� ����� ������� �� ��� ��� � ������ � ����� E ,�� �. P 5����� E �� �� ��������� %������� ��� ������ ������ � %������� ��

�,�� �. P E ,�� ): � � � )

: . P ��: K ��� K 0�: K ��K <� K ' ,���.

���� �� �������� �� ��� ������ ����� ,�� �. � ��� �� � � ���� ,�� �. ��� �� ������ ���� � ��� ������N�� �����

3� ������� ������� �� ��� ������ ���� ��� ��������� ,�� �� � � � � '. � ��� ���$���$ ��� �������� ���� ���� �� ���� ������� ��� ����� �� �� � �,�� �.�� ���� �� �������� �� ���� �� ������� ��� �� 6� O� �� 2������� R�� .

� , ?=*.� !<!7!<?S� ������ � ���� A����$������ � ������B �� ����� �� ���%���� � ���� ��� ������� ������/ O�� � ��� � �� �������� ��� ������� ����� ������ �� ��� � �,�� �.� ��,�� �.� ��� ��,�� �. �� ���� ������� ,����� ��.� ����

��,�� �. P !��K �� K � ��� ��,�� �. P ��K !0� K < ,���.

�� **�� ��� *

*��� 4� ��� ���� ���� �� ��� ��:����� ������ ������ �������

�,�) � �. P �,�� �.)��,�� �.K�� �,�� �) . P �,�� �.)��,�� �.K0���,�) � �. P ��,�� �.)!�� ��,�� �) . P ��,�� �.)����,�) � �. P ��,�� �.)�( ��,�� �) . P ��,�� �.)!0� ,� �.

3������� �� ��� ������ ��� ������ ���� ������� ������� �� ���� � ����� �,,.��� �,,. �� ���� ���������� 3� ����� �� ���� ��� � ���� ,���. ���� � ��,!5� 5. �� ,5� 5.� ��� �� �� � � �������� ��� � � ��������( ���� �� ���� �� ����� �� ,�� �. �� ,�� � �. � �� ,�� �K .� � ������� ,��=� 6. ��������� ��� � ,���������K0.� � ���� �� ,�� � �. ���� � ���� �� ��=� =� =�!����� 6 � 6� �( � ���� �� ,�� �K . �� :��� �� %����� 4��� ���� ���� ���� ���� ��� � ������ � ��� ��� �� ������� ��� ����� � ������N�� ����� � ��� ����� �����

Page 51: The Art of Computer Programming - Bitwise Tricks and Techniques

-= ���������� �������� ����� *� �"

3� ����� �� ��� %������� �� �,�� �. � � ���� ,���. �� -�: K =�: �,-� K =� K ;?;.� ���� �� �������N� ��� ���������� 4� ���� �,!5� 5. PE , ?�;��5�;. P �*; ��� �,! � 5. P K<;( ������ ���� ,!5� 5.� ����� ����� ��, ?�;��5�;.� �� ������ ��� � ����� ��� ���� ,! � 5. ������ O���� N��� �� � ���/

���� #����� ���� �� �

���� ���� �� �

��� �� ��� ���

��� ���� �� ���

��� �� ��� ���

�� � �� ��

,� �.

��� ������� ��� �� ������� ������� ��������� � �� ��� ���� ������� ������ �� ����� ���� �� ��� �� �,! � 5.� ������� �� ���� ���� � ����� �������,!5� 5. ��� ,5� 5. ���� �� ����� ������ � �� ��� ��� 3��� �� ���� �,!5� .��� ��� �� �������� ,�*;.( �� �� ���� ��� # �� �,!5� !. �� �������� ,�-".� ���� �� �� ������ ���� �� ���� �,!5� ".� ��� ��� �� �������� ,! .( �� �� ���� ���#�� �� ��� 1� � ��� � �� ��� �*;� �-"� ! � � " � �";� ?"� �; � � � � ����� ����� �� �� ��������� � ����� ��� ��� ����$������ ������ �� ���� ��

�������� ( ,0����&��" ��� ��"����� ��� ���� .� &���� ��� ������ ������,�� �. ��� ,��� ��.� ��� �� ������ %������� �� � �� �� ,���.� ���� � ������������� ��� �� ������N� � ������ � ��� ����� ������� ������ �� E ,�� �. P 5����� E ,�� �. P �,�K )

:� �K )

:.� �� ������ ��� � �� ���N���� ����� ��� ��� � ��

������ ������ ����� �� � ���� �� ,�� �. �� ,��� ��.� 4� ������ ����

�. C�� $�� ��� ������ ,M� N. ��� ,M�� N�. ����� ���� ���� E ,M� N. P E ,M�� N�. P 5�

��. ��� ���� ���� � �� ,M� N. �� ,M�� N�. ���������� � �� ���� �����������

���. � P �M K ):�� � P �N K )

:�� �� P �M� K ):�� ��� �� P �N� K )

:����. � �� ������ ��� ���� �� ,M� N. �� ,M�� N�.� �� ��� E � 5 �� �� ���

(�� R������ �N��S � � P ��� �� �� � ( � � P ��� �� �� � 5� � � � �� ��� � � ������ �� �,�K � �K .� =� ��,�K � �K .K�� 6 � ��,�K � �K .K0� ����� �� �!� � � � �� ��� � � ��� ��� � � �,�K � �.� = � ��,�K � �. K ��6 � ��,�K � �. � 0� ��� �� �� �"� � � � �� ��� � � ��� ��� � ��,�� �K .� = � ��,�� �K . � �� 6 � ��,�� �K . K 0� ��� �� �� �-� �� � �� ��� � � ��� ��� �� �,�� �.� = � ��,�� �.� �� 6 � ��,�� �.� 0���� �� �� �;�

(�� RC���� � ���S � � � 5� �� �?( �������� �� �=� C����� ���� ����������

(�� RG��� � �����S ��� 5� �� �*( �������� �� �?� C����� ���� ����������

(�� R[� � ���S � � � 5� �� �=( �������� �� �<� C����� ���� ����������

Page 52: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� -*

���(���(��0�#�&�(�� �(���6((

(+� RO�� � �����S � � � 5� �� �<( �������� �� �*� C����� ���� ����������

(*� R6��� ���S +���� ��� ���� ,�� �.���,�� �K .� ���� ��� � � �K � ��������� � 5 � � P ��( �������� ��� �� �K 6� =� =K �� 6 � 6 K !0�

(0� R6��� �����S +���� ��� ���� ,�� �. ��� ,�� �� .� ���� ��� � � � � �������� �� � 5 � � P ��( �������� ����� ��6� =� =��� 6 � 6�!0�

()� R6��� ���S +���� ��� ���� ,�� �. ��� ,�� � �.� ���� ��� � � � � �������� �� � � � P ��( �������� ����� ��=� =� =�!�� 6 � 6���

(&� R6��� �����S +���� ��� ���� ,�� �. ��� ,�K � �.� ���� ��� � � � K �������� �� � � � P ��( �������� ����� �K=� =� =K!�� 6 � 6K��

(� � R3����� ���N���� ��S 4�� � � � ��� ����� ��� ���� ,�� �.���,�K � �. ������ � � � K � 4�� � � � ��� ����� ��� ���� ,�� �.��� ,�� � �. ��� ����� �� � �������� ��� � �������

(��� R3����� ������ ��S 4�� � � � ��� ����� ��� ���� ,�� �. ��� ,�� �K . ������ � � � K � 4�� � � � ��� ����� ��� ���� ,�� �.��� ,�� �� . ��� ���� � � � � �������� ��� � �������

3� ����� �� ���� ���� � ������ �� ������� ���� ,�� �. P ,!5� 5.� ,��� ��. P,5� 5.� ��� �,�� �. P -�: K =�: � -� � =� � ;?;� �� �� ����� ��� �����,!5� 5. ��� ,!5� . ��� ,!5� !. ��� , ?� !. ��� , ?� ". ��� , ?� -. ��� , <� -. ���, <� ;. ��� , *� ;. ��� , *� =. ��� � � � ��� ,;� ?. ��� ,;� 5.� ���� ���� � ��� ���� ,5� 5.� ,)�� ,���. ��� ,� �.�. H������ <! ��� ���� ��� �� �����

6������� �� ��� ���� �� ���� �? �� ���������� � ��� ������� �� �������G,�. � G,�. � , � ,�!�' � �..� ����� ��� G ������ � ,���. ��� ,�� .�6������� �� ��� �� �� ���� �� ��� �� ��� �� �� ���� )��� � 5 ��� � ���

G,�.� G,�.�,, �,�!�'K ����,�� ��...�, �,�!�'����,�� ��....( ,� �.

��� ��� ���� �� � ���� ����� �� :��� �� ����� ������� ��� � �� �� ���� ��� �6������� �� � ���� ����� �� ������� ������� ������ ����� �� ���������

J����� ���� ��� � ������ ��� �������� ���� �� ��� ������ ���� ����� P 5( ��� �� � ���� �� ��� �� ���� ����� ��� ���� ��� ������ ���� � ������� ����� ���� � P � P 0 P 5� �� � ����� ���� ���( ���� �� ���� � ���� � ���&

��" ��� � ������ ,��� ������� <-.�

���� ��� I����� ����� �������� � ���� ��� ��� �������� ��� ����� � ������J�� ������

4��� ���� ������� �� � �� �� ��� ���� ������ ����� G ������� ������� �� ��� ������ ������� � ��� ��� ����� ������� �� ���� �� ��� ������ ������ 3���� < � ������� � �� ��� � ��� ������ �� � ��� �� �%�� ���� -;Æ$-;Æ$-;Æ ����� ��� �������� �� ������������ ��� ��� �� � ����� ��������� �������� � # ������ ��

Page 53: The Art of Computer Programming - Bitwise Tricks and Techniques

-< ���������� �������� ����� *� �"

�RF� ��(����8���������( �������+ �� (����-��0 �� � &��!��.6((��0 � ������ �� � &��!����&&#.&��!�� 0����������������(&�������G���(��� !�����

��

��

��

��

��

��

���

����

���

�� � �� ��

�����

��

����

��

��

��

��

��

��

���� � � �0 ���� ���� ��&����� ����� �� � � �� K F�

# ������ � ��� ��� �� � �� ����� ������ '�� ������ ��� �� � � ����������� �������� ������� :��� ����� ���� ����� �� ��� ���� �� ��� ��� �� �� ��$��������� �� A��������� ������B �� �� %������� '9�N�� �� ���� � � �� � 3������ �� 3��� ? ����� � ������ �%���� ���� ���� -5 ������ ,�;� �)� � � � � �>C� �?;.����� �?; P �;� ��� ����$������� ������ ,�;� �:� � � � � �?;. �� �� ��� ����(��� ������ ,�)� �>� � � � � �>C.� �� �� �� A����� �������B ������� ���� ��� ��� ��� ������� ��� V������ H��� ������� 6,�:� � �:�=)� �:�=:. ������ �� ����� �:� ����� ��� �� �������� �:�=) � �:� � �� ���� �� ����� �:�=:� ���� ��� �� ���������:�=:��:�=)� ���� � �:� ��� �� ��� ������� ��� �� �:��) �� �:�=)� ��� �%���������� ������ � ������ ����� �:� ������� �������� ���������

H������ <; ������ 6,�:� � �:�=)� �:�=:. ������ �� ��� ������� <= ��� ������� �� ������N� ��� �%���� ���� ����� # ������ �� ��� ����� ������ ���������N�� ����� ��� ���� �� � �� ���� � ��� ���� ��

��������� �� ��� ���� � �����" ���� ��� ����� �� � ������ ���� ����� �� ���� ��� ���� � ���� ��� ���� � -���" � ������N�� ������� ��������� ���� ������� ������ �� ���� ��� ���� ������� ��������� �� ������ ������N���� ������ ��� #� ���� ��� �� ����� �� ��� ���$������ ��� �� ������� �� T��� G� 8����� .�� �* , ?<?.� !5?7!!?�

$��������� ������������ 6���� �������� ���� �� � �� ���� ���� ������ �������� ���������� ����� ������������ ������� �� �������� V��� ����� ��� ������ ���� ��������� �������� �������� ������ ��������� ������ ���������� $��� ����������� ��� 1��0 �� ������ ��� ,��.� ���������� �� ����������� E��� 7�+�$* ��� ��6�.�$* 1��0 +� �7* 1��0 6�.� ������� �� ,��. �� ����� � ���� ���� ���� ����$���������� ���������

�0 �BC* ��� +�+�$* ��� 6�.�6�.�$ ,� .

���� ��� ����� ������ ���� �� ������� �� � ���� � ���� ���� �������� ���������� ��� � �$�$����� ���� � ,� . �� �� � "� �������� �� ��� � �"� 97 �

Page 54: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� -?

!�����0�� ��� � �0��!0 �������

'������ ��������� ��� �� � �������� ��� ���� � ���� � ��������� 3������ �� � ���� ������ ���� � 1��0 ���������� �� ��� � ����

��/ .� * �� .�.� * �� .�.�$�*

��� ��+�$* ��� ����+* ��� ����.* ��� +�+��*

��� ��6�.�$* ��� ����6�.* ��� ����.* ��� 6�.�6�.��*

,� .

��� ��� ��� ��� ������ ��� ���� . P �R5 �P5S� 1� ���� �������� ����� � ��������� ��� ����������� ��� � ��� �� ���� ���� ��� ���� ����������� �� ,� .�

��� ���� ��� � � ���� ��� � ������ ������� �� ���������� ����� ��)������ �� ���� �� �� ��� � ����� ��������� ������� �/

� � � �� � ��� �� � �� &� &K � ��� �� �� $ ���� � & P &!�'�

1������� ��� �� � �� � � � � K � ��� �� �� � ���� � � P �!�'�

���� ��� � � � K ��� �� �� % ���� � � P �!�'�

� �� ��� ����� ���� �� ��� A�������B ���� �� ���������� ������� �� ��$�� ���� ���� � ����� �� ������ �� ���� ���� ������ ��� ���/

: 1�� ��!@�+D* ��� ��2 ;���� �� �� � �� ��)� !@�7�� ���� �� � ������ @@�@@�& � � � E 7��0 @@�� ��5� / � � �� �� � 1 �� ����� !@�!�� ��@@ <�� �� ��� �������� ���A�� �2 L�� ��� ���� ������

: �)� +D�7�� ���� �� � �� ���� DD�DD�& � � � E 7��0 DD�E ��5� / � � �� �� � 1 �� ����� +D�+�� ��DD <�� �� ��� �������� �,�

�: ��� ������& � � � E 7����0 ���� -����� �� � �1 �� ��A�� 0 ��5� / � � ���

,8�� @@ P <,& � &!�'.� DD P <,� � �!�'.� ��� �� P <,� � �!�'.( ��� ���� �< �� ������ ������� �� �� � ��� �� �� ����������. ����� �� ������� ��� �������� �� :��� ���/

: 1�� ��!@�+D � � ����'�� � ��(�1�� +D���!@ �, � ���'��� ��(��)� +D�7�� ���� �� � �,���� ����& � � *C�� � �� D���� @@�@@�� � � � E C�� � �� D���� !@�!�� ��@@ <�� �� ��� �������� ������ ����& � � � � *���� DD�DD�� � � � E C�� � �� D���� +D�+�� ��DD <�� �� ��� �������� �,���� ������& � � � E 7���� ;�@@�DD* ��� ;�;��� � � ��3 ,,3 ������ ;�� -����� �� ���� �� � ��� �� ��� ���� ��

4��� ��� ��� ����� �� ���� ������� �� ��� ���� � ������ ������ �� �������� ��$ ����� � ����� � % ����� ����� ����������� ��� ���� � ��� �� �� ��������� ����� ��� ��� �������� �� �� �� � ���� �� ������ �� ��� ������

Page 55: The Art of Computer Programming - Bitwise Tricks and Techniques

;5 ���������� �������� ����� *� �"

,��==,1��==!���' !�(���(�������!���&�� �!��������&#� �!���������!������� !���'���� � �!�������� �� ���MF����,�1

Æ%�-���6��� 6(�

$/�� ������������ �! ��� �� ����� O���� ����� �M �� ����� � ������������� ����� �� ������ � ��� �� ��� ��������� ���� �� �������� � �������� �=-$��� ���� ������ ����������� ��� ��� ����� ����� �������� � ��� ��� ������� ��� ������� �� <� < '�� ��� �������� ��� ��� �� �� ������ � V���� � �������� � ���� �� ������ ��� ��� �� ����������� ���� ���� ������� ����������

� � P ,�A � � � �)�;.:@* �� �� �������� ��� � P ,�A � � � �)�;.: �� � ���� � �������� ���������� ��� ��!�� ���� ,� �A�A � � � � � �)�) � �;�;� ��� � ���� ��!�� ����,� �A�A� � � � � �)�)� �;�;� 3� ����� �� ��� ��!� ��� ���� ��!� ���� ���,� �)( ��� ��!�� ���� ,� �) � �; ( ��� ���� ��!�� ���� ,� �) � �; �

�� ����� � � ������ ��� ��� ���� �� �������� � ���������� 4��� � P,�A � � � �)�;.:@* �� � ����� ��������� ��� ���������� ��� ��!�+ ������� ����������� , ����� ��� ���� ,� �� ��� ��� � � ��� ��� ��� �� � ��� �� �

)������ � P � P ������������������ ���� ��� ��!�+ �������� ������� , �� ����� ���� ,� ��

��� ������� �� �P 5� ��� � ,� �� N�� ���� �� P 5� �������� � ������ ���� �� %���� ���� � ������� �� ������ ����� �� :��� ��� �������������� �� ������� � ������ ����� ��������� �� ������� �� ���������� ��� ,��.�

4� ������� �� ,��. ���� ��� ���� �� ���� �� ����� ��� ���� � ��� =-$������� ��� ���� ���� �������� ��� ����������� � �� ������ ���� ���� ���

�� �� � ��������� �������� )������ @ �� � ���������� � �5� � � � � � *� ��������� 5 �� 5@� �� @� � � � � * �� *@� ���� ��� �������� 9 P ,!A� � � � !)�!;�.:@*��������� �� � ���������� ����� ���� ����� ��� �� ���� �����/ ��� ��!��

�� !��� �� ��� ���� � �� ������� ,� � ���� 3�������� ��� ;���+ �� !��� �� ��� �� � ���� ���� � �� �������� �� ��� ���� � ����������( �� ����#� � ,�A � � � �)�;.: ���� �� P ,�A� � � � �)��;�.:�

4��� � ��� � ��� ��� ������ �� ��� � �� �������� ���� ��������������� �� ��� ����� ���Z� , �.� ����� ������� � ����� �������� � P !>:�K� P,�>) � � � �)�;�>) � � � �)�;.: ���� ��� AN������B ��������

% P � � � P ,�>)�>) � � � �)�)�;�;.:� ,� �.

4��� ��������� ���������� ������� 9� 5� ��� 2� ��� ����������� ��� ��

, P ,�>)�:A�>;�:*�:C�:@�:D�:?�>)�:A�>;�:*�:C�:@�:D�:? � � ��A�>�*�:�@�)�?�;�A�>�*�:�@�)�?�;.:� ,� �.

# P ,�:A�>)�:*�>;�:@�:C�:?�:D�:A�>)�:*�>;�:@�:C�:?�:D � � ��>�A�:�*�)�@�;�?�>�A�:�*�)�@�;�?.: ,� .

��� �� �������� %���� � ��� ��� �� �����������

��� ��7��* ��� �� ��* ��� ;���,* ��� ;�,�;* ,� �.

��� ������� !5"� )� ������ � ����� � ����� E��) ,��.* ��� F���;� ���� ������� ����� ���Z� �� :��� ��� ��� �� � �������� '� �������� ��� ��������� ������ �� ������� ;" �%���� "5 ��� �� ,��� Æ$�����.�

��� ��� ����� ���������� ���� �� ������� � ���� ���� ����� ���� � ��$�� �� ���� ���� 3� ����� �� ������� �"� 97"* ����� ���� ��� ��� ���� ����� ���� ����� �������� ��� �� ��� ������� �� � ����� �� � � !� � ������� � � � <�

Page 56: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ;

�#�(�� �������# ������0��� ������-�, > 2, ��%) ����� ��# ���4 FE��

��� ��� �� � ����� ��� ������ ������" ������� �� ���������� ����� �� ������ ���� ���� ���� ������� )����� � ���� �� ���� ����������� ��A�-� �����B �� ��� �� ������ ������ ����� � ����������� ��� R��� 4� 4�2������ ��� G� �� '���� ��� �!� �& , ?= .� !!<7!";S� 1�� ���� � ����������� � ����� � �� 62" ����� � ��� �� �� ���� ���� ���� � P ,�A � � � �)�;.:�� � �� ��� ��� �� ������

�,�. P ,�A � � � �)�;.� P �A�A K � � �K �)�K �;� ,� �.

4��� ����������� ����� ���) � � � �)�;� �� ���� ������� ��� �������

A P����),�.�

D2��)4 K � � �K �),�.�D K �;,�.

��)* ��� 9,�.� ,���.

���� 9,�. P �)*K�)@K�:K � ����� �� ������ ��������� ��� !� ��� ��������� ��������� � A �� � =$��� ��������� ������

��� ���� ��� �� ������� A �� �� ������ ��� ���� �� � ����� �������� ��� ������ ������� ��� # ������ -�=� G� ��� ����� ���� �� �� ����� ��� ����� ��� � A� P

����),�.�

D2��)4 K � � � K ��,�.�D���)* ��� 9,�. �� ���� A� P 5�

��� ���� �� ��� ��� �������

A� P ,,A�=)� <. L �����.� ��� �����R,A�=)� <.� ��S ,���.

�� ������� � �� ���� � P 5� 8�� ��� �����R�S �� � =$��� ��� � ���� ������ �� ��� ������� � �,�.�)*� ���� � 9,�. ��� ��� !� � 5 � � � !;=�R)�� #� 2��N� ���� ����� �� " ,T��� ?<".� -57;5�S

'�� � ����� ���� ��� �� ������ =- ���� �� ���� ������� � <� ��� �� ������� �� ��� <� < ������� B ��� 7 ���� ����

�,�.�*? � ,�B.,�. K ,�7.,�.��D ,���� � 9,�. ��� !.� ,���.

� ������ ����� �� ���������� � �� �� � � < ����� � ����� ���� �� ������ ��� ����� ���� ����� ���) � � � �)�; ���� ������ N��� �� ���� �� � �� ��� �� <� ��� ��� ��� � ����� ������ �������� ������/

'���� ���� 0� 5� � � <� ��� ,� ,��=A � � � ��.:@*�

4�� � � 5� ��� #� , �B� $ � , �7� � � <�,� ,��=A � � � ��.:@* � #� ,$� <.� ,0� ;=.� ��� 0� $ L ����

,��.

8�� , � B ��� , � 7 ������ ����� �� ��� ������� ��� ����� ��� ������ �-�

������ ,,�)*K0�D. ��� 9,�.� �� ���� ���� � �������� �� ��� =-$��� %������� ,��� ��� <$��� %������� 0� H������ ! 5 �������� � ����� �( ��� ���� ���������� � ����� ����� �� �� � ,�K 5�. �< K., .�

��� �������� �� �� ������� ���� ��� ��������� ���� ��� ��� ���� ����� ���������� ���������� J�� ����� ��������� � ����� �� �� ����������

2� !���� �� ���� ��� ���� �������� ������� �� 8��� )� 4���� T�,#������74�� ��� !55!. ��������� ������� ��������� �� ������ �������N��� ������� ������ � ������� ���� �� ���� �� � �� �� $�� � �������� ���� �� ����� ���� �� �����

Page 57: The Art of Computer Programming - Bitwise Tricks and Techniques

;! ���������� �������� ����� *� �"

E����&���������!�(!���0���7��6���%�������������(�0�&���#���' ��!���!�( '�(�����!'��!0�!���-�#9� 6(���! !�(���(�����������7(#6(��������! ��7�������!+ �����%��

�!�"#$%�%

� �� C�� D #��� �� ��� ��� �M�� � ������� � � � � �� � � � � '� 3 �(� � � � � �N

�� C�� D '@� �� #������ L��( !�� ��� � ��� ������� �������� $���� �� ��� �������� ���� �N '�( � � � � � �6 '��( � 3 � � � �6 '���( � � � � � � ��

�� C��� D �� � 1 '���� � � � ����(� ���� ���� 1 7� ��� �� 1 '2���� � � � 2��2��(�� /� � ����$� �� � 7� � �� � 4� � � � � 1 �7� �� 7� �� 4� �� 7� �� �� � � � � � �� �� ��� �� 1 �7� I�$����� '� � �(� � � � � � � � � �� ��� �� � � ��

� �� C��� D <�� �� 1 2�� � 1 ��� � 1 �E7� ��� �� 1 ��7 ����� ��� ������������ ������$�� ��� � ����� ��� ��� ��������� � �� ��&������������ ������� �� /����� ��$� ��� 1 � 1 �� 1 �� 1 �� #��� ��� �� ��� ��N

� C��� D I�$� � �����$� ��� ������� �O�� ��� ���� ������� ������ ������P

�( '� � �(� � 1 � � '� E �(6

�( '� � �( 3 '� � �( 1 ,'� � '� E �(( 3 �.� � 1 ,� 3 '� � '� E �((.� ��

� C��� D Q��� ��� �������� � ��� � � � ���� '�( � � � 1 � � �6 '�( � � � 1 � � ��

�� C��� D '-� ��������� 78���( Q��� � ���� ��� � �$��� ��� ������ � ����� 1 ' � � � ������(� � ��� ���������� �������� � 1 ' � � � ����

���

��(��� ��� $�� $�����

����� ,��� �� ������� �������� ��� ������R

� �� C��� D =�$�� � &���� ��� � � ��������$� ��������� ��� G������� ��� ����H � ��� ��&��� � ��

���'�( 1 ��� � � � � ��� � �� � ��

<�� � � � ����� ��� ��� � � � � � ��� I�$� ���� �� � 1 ���'�( ��� � 1 ���'� (���� � � � 1 ���,'� � �( � '� � � (.�

� C��� D '����( /� ����� ���� � ���� ���� � ����� � ������ ����� ����� ��� ������� �� ���� �� �� �� 1 � � � 1 �� 1 � ���� �� �� � ������F� � �� � �$�� ���� ����������6 �������� ��� ������ ��� �� �� � ��� ����� �� ��� ������� �� ��� ����������� ��� ���$�� ������ ��� �� �� ��� ���� ������F� � ��� I�$� ���� ��� ������ ��$� �� ��� � $���� �� ��� ��� �� �� � � � � � �� �1 ��

��� C���� D '� ������ �����( ����� ��� ������� *� ��&�� ��� ������� � � � �G��� � ����������H �� ���$��� �� ��� ��� ��

� � � 1 ����'� � �(� '� � �(� '� � �( � � � � � �� � � � � ���I�$� ���� � ��� � ��&�� � ���� $�� ��� ��� � ��� ��������$� ��������� I�$� ������� �� � � �� � � ��

����� � � � � ��

�� ��� � � ��

�1 ��

��� '�� ����� ���� ���� &���

������ � �&���� � ��J� ����� ��� � ��( ?������ �� � �� �� � � � ��������

� ��� C��� D '@� #� <������� 78�*�( Q��� � ������ ��� � ��������J� ��� ����� ������$� �������� '�� ( �� ���� � � 1 � �� �����F� &����

��� C��� D +�$��� �� �������� �� �� ��� � �� �����F� &���� ����� �� � � �����

������ ��$� � � '� � '� � ��(( � ��

��

��� C��� D '!�" ��# $��$ ����( ?����� ��� ���� � ������� 8 �� ������� �� ������ �$��P ?����� �� �� ��� �� �� ��� �� �� �����6 � �� �� ��� �� ��� �� �� ��������� �� ��������� ��������$� �������� �� ��� � � �� I�$� ���� ��� ������ � �$��� �� ��� � $���� �� ��� ��� �� ��� ���� ��J�� ������� ������ �� �1 � � � � � � �� ��� �1 �� '����(�� � �� ''���(���(� Q� �������� ���� � 1 : ��� '��� ��� �� ��( 1'�� 5� �� 5(� ��� ��� ������� �$� �� � '�� 5� � 4(�

Page 58: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ;"

��!�(�+ ��6��� &���# �:%���� ���0&������0 ��������!��������( ������� ��0�����!�������� � �!��������&�(����S����1�� �����������!����0��'( �����

��� C��� D � ���� ��� ��� � � ������� ��&���� ������ ���� ��� ���� ������� ����� � 7� � � � �������� �� �$�������� ����������� �� � ��� � 1 �� ��� ��� ���� ���� ���� ��������� � � � �� ���� �� ��� �� �� �$��� ������ ������ �6 ��� �� �� ������� �� ��� ����� ����� ������ ��� �� 1 ��� ���� ���� ����� � � � �� ��� ��� ����� � ����� ������ ��� �� 1 ��� ���� ���� ����� � � � �� !�� � � �������� �� �� ��� � �������� � ����� �������� 1 ' � � � ������(� ��� ��� ����� ������� � 1 ' � � � ������(� 1 � '�( �� ������� �� 1 ���� 1 � � � �� 1 � � � � ���� � ���� � '�( 1 �� �'�����( E �� '�� ���� ����� � ��&����� ��&���� ���� �� ��� ������ ����� ��� � �������� � ��� ������ � ���� ����� �������� � ���� �� ��� ��� ������� �� �� ����� ��� �� � ���� � ��� �����(

! %$��"&��' ()�"�� � �� ��� ������� �� 1 � � � '�( ��&��� �� � � � ���������Q� �������� �� ��� 1 7 ��� ��� � ��� ���� �� ��� �� �� ��$� �� 1 � � :C� �� :1�D�

�( I�$� ���� �$��� �������� � ���� �� � ���� ����� � ��� ����� ���������

�( Q� ���� �������� � �� � � '� � �( � �������� � ����N

( <�� � �� �� �� � ������� ��� ����� �������� ��� ����� ��������� I�$� ���� ��

�� � �������� � ���� �� ��� ��� �� �'� � �( 1 �'��� �� ( �� ��� ����� � ��� ��

�( I�$� ���� �������� ��� ��$����� � �������� � ����� ��� �������� � ������� '/� � ��� ��� � � ��� �������� � ����� �� � ���� ����� �� ��(

�( ! �������� � ���� �� %����"�� �� ��� ������ ������� �� 1 ���� ��� �� ��� �� ������� ��� ��� � ��� ������� �������� � ����� �� � � ��� � � ��

� �� C��� D L� @� > �� ����� ���� ''�E�(�4(�� 1 ''���(�4(E� �� ��� �� Q������ ������� � ��� � � � ���� ''� E �(� �(� � 1 ''� � �(� �( E � �� �� ���������

�� C��� D ! � ���� � � �� ����� ��������' �� �� �� �� ������� �� ��� ���

,,� � � ''''� E ��(� ��( E ��(� ��( E � � � .E ��.� ��

�� ��� ������� ������� ��� ��� ��� ��� � � � � ��� ��� ���� � ��

�( I�$� ���� �$��� ��������� � ���� �� � �������� � ���� '��� ������� 7:(�

�( Q ��������� �� �� ������� �� ��� ��� �� �� � �� � � � � � �� 1 �� ����� #��������� ���� �������� �������� � ��� ��������� � ���� ''� � �(� 7(� �N

( <�� ��� 1 �� '��7( 1 ��� ����7� ��� ���� �$��� ������� ��������� � ������ �� ������� �� ��� ���

� � �� � ��� � �� � ��� � � � � � �� � ���� �� � �� � � � � � ���

�� ��� �������� ��� ��� � � � � ���� ����� � �� ��� ���� ������������� �� ��0 ��

�( ��$������� ��� ���� �$��� � � ��������� ��&��� � ������� ��������� � �����

��� C���� D /�� ��� ��� � ������� 7 ���� �� �������� � ����� ������� � �� ��� �� ��$�� ���������� � ����� ��� �0 ��� �� ����� �� ������������ ������ ������� ��� ��$�� ��������� �� ����������� J��� ���� ���� ��������� �� ���� ������ � &���� � ���� � ������� $�������� ��� �������� ���� ��� ��� ������ �������� E ��� �N#��� �� �� ��� ���� 3N

��� C��� D /�� �� � ����� ������� ���� ������� '��� � 77( 3 7 �� �� � ��� � �� �� ��7 � �� � � �5 � �� ����� ��� ������ ��� � ���������� � ��� ��O� ������������ �������������N

Page 59: The Art of Computer Programming - Bitwise Tricks and Techniques

;- ���������� �������� ����� *� �"

�(#����F�%�� ������(�.) ������(����9� �������� ��������������� �������9� ����,,�1��! ��!&���7���������&���-�!�����((������� � !!�#����0 �((���������7�����+ �7�����0 ���!�0�� !���

� � � C��� D '*������ $��$$��'����� �&� $��+( =�$�� ����� $���� ! 1 '��� � � � � �����(�" 1 '��� � � � � �����(� ��� # 1 '��� � � � � �����( � ��������$� � ������ ���

�'!� "� #( 1�

�������

�������

Q� �������� �� 1 � �� ��$� �'!� "� #( 1 ������E������E������E����E������E������ E ����� E � � � E ����6 �� ������� ����� ��� ��� ������ �� �� ��� ��� �� ��� �� , � ��� �� � ��$� ���� �'!� "� #( � �'!�� "�� #�(� ����� !� ������ ���$��� ! ����� ��� ����������� ����� �� � �� � � � � � ������

�( I�$� ��� ��� �� ���� ��� �������� � !� "� ��� # ��� �� ��� 7���( ��� ���� �� �� �������� �� � �� ��������( ���������� �'!� "� #� $( 1

���������� ������%� � �'!�� "�� #�� $�(�

� ��� C�� D ', �-�$�� &�".�( /�� ������� ��$�� �������� ��� � � ��� � � ���� �� �� ���� � �� � �����$� �������� ?������ ���� ���� � ���� �� ��� ��� �� �� ��� ��

� � � 3��6 & � � E �6 � � & E '''& � �(��(� �(�

��� C�� D ����� � ��� $� �$�� � =����F� ���P ��� �� � �� �� � ��� ��

��� C�� D ��������� =����F� ��� ������� ���� ���� ��� ��� ���� ���� � � �������� � ���� ��$�����

� ��� C�� D ! ��0 ��� � ������ ����������� �� �� ����������� �� � ������ � ���� ��� ����� � 7 �� ��� ������ � ��� ����� ������������ Q� �������� K--..-.F ���������� ���� ��� � '��77�7(�� ��� � ���� 74� ���� � � � � ���� � -�$���&���� �$�"���( #��� ��� ��� �������� ��� ������� ����������� ����� ���� ��$� ������ � 7�N�( � ���� � �� � ����������� ���� ��� � �� ��� ���� ������ ����������� ���� ����

��� ���� � ���� � 7�� ��� ���� � �� �� �� ��� ��� � ���� � ���� ����� �������� ����� � � =����F� ����

( ��������� � � ����� � ����� ��� ���� ���� '� � 4��

� ��� C��� D I����� 7�4��SI ����� ��� ���� � ��� � � ����� � ��� &��� &$� � ���������� � ������ ���� ����� ��$���� � ��������� ���������� #���� �� ���� ������ ���� ��� ��� G���$� � ?����������H '������� :�5�:"*( � � ��� � ����� � ��� �� ���������� ��� ���� ���� (� ����� ��� ������� ��� ��� � � � � ����� �� �� ')*(� !�� �� ����( � ��� ��� ���� ��F� � � ������ � 7�*� #��� �� ��� � ����� ���� ���� ( 1 45*:N

� �� C�� D Q � $� ��� ��� ���� �� ���� � � �������� ?�� � ���� ������ ������5�� ������ ������� � �5� ������ � ����� ��7�� ����6 ��� �� ��� ��� � ���� ������ $�� ���� ���������� ��� 7�� ���� ! ����� ����� ��� ��� ��� ���� 7� T� �� 7 � ���� 5�� � T� �� :� @� ��� ��� �� ���$�� ����� ���� �N

�� C�� D � ���� �� ���� ����� ���� � � ����� � 7� ������ ����� � 5���� �����#� �� ��� 7� � � ����� ��� �� :���� ���� ������� &����� ��� ����� ��� *��������� � ������ ; � ����� ���� ���� ����� � ��0 ��� ��$���� �� 7�� ������ ������ ���6 �� ����� �������� ������ � ��� ��� ���� �� � � �� ����� �� � ����7� ��������� ����������

���� ���$��� ���� �����F� � ����������� ������ ���� �$��� ��$�����

��� C�� D �� ��� ������ � ?0�� '+)("'�+(� �� � �� � �� �� '�( '�7���7�(�N'�( '�7��77�(�N '( '�����7�(�N '�( '��77����(�N '�( '���7����(�N '�( '��77�77�(�N

��� C�� D #��� ��� ��� ������� '�E7( 3 2� ��� �N

� � C�� D 'T� -� I�����( ?������ ��� ���� ���� ,� � '�*( �� ����� � ,����

Page 60: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ;;

� ��!�( ����������(#��� � �(0����!������� ���������((:%���� ���0�1�� �����������-���

�������� ��

��Æ' ����#�6' ��&(!+ � ��Æ' ����#( �!����� � ) &���I(0 'J0�����0 ���������-'&���# ������2�4 ��!!���-�0�����! � &���+ -�0����������7���0�������0 �-� &���

��� C�� D �� � 1 �� ��� ���� ����� ���� '��( ���� ��� � � : '���� �� � ��� �� ������������� � �(� #��� ������ � './( ��� '.0( ���� ��� � ��� ���� ��� ��N

� ��� C�� D ! ������������ ����� +�� <� �� I��� �� ������ � �� ���� ��� � ���� ���� ���� � ������ �� �� �����P G��� � � �6 ���� ����� �37 1 �� ��� � � �E7��� � � � � 7�H @� ������� ����� ���� � �� � ����� �������� ��� �$����� � ����� ����� ������ �� ��� �$����� $�� � � �� ���� �� 76 ��� ��� �������� ��$����� �� ������ � ��� �� ����� ������ ���������� 0 ����� ������J� ��� �������

��� C�� D #��� �� ��� ��� ��� ���� �� �� ���� '.)( �� ��������� �� ����N

� ��� C�� D '<�������� I���� ��� -������� 788*�( ��� ���� �� K5*F �� ������� �� K:8F�� '.)(� �� �� �� ���� ����� � �������� % �& ���� � ��� � ���� � 1 ��E�� 0 ��������� : � � � �� '!��������

����

�1 ��7 ���� ���� � �� ������� ������(

��� C��� D <�� � ��� � �� ����� ��������� I�$� � �����$�P �� 1 �� �� ��� ��� ��� � � 1 '� � 7(� '� � 7(�

� �� C��� D !����� � -����������F� ������� ������� :�7"4:� �$��� ������� ��� � ��0 � ������������� 1 � � � � � ���� ''�( E ''�( �� ������J��� ��� ����� ��� � �� �� �� ����� 0 ���� ���� ������� ��������� ����� I�$� ��� ��������'� � 4�( 3 ''� � 4�(� 7( 1 ��

�� C�� D =�$�� � 1 '�� � � � ����(�� � ����� ����� ���� � �� ���� ��� 0 ��������

�( �� 1 '��� � � � ��� ��� (�� ����� ��� 1 �� � � � � � �� � �� �� � � � � :6

��( �� 1 '��� � � � ��� ��� (�� ����� ��� 1 �� � � � � � �� � �� �� � � � � :�

��� C�� D #��� ������ � '..( ��� '.�( ���� ���� -� �� � �7N

��� C�� D @� ��� ��� ��� �������������������� ���� �� '.*( ���� ���� ������������ � ����N

� � � C�� D Q�� �� '�+( ���� �� � ���$� ��� �������� � � � 7 ���� ��� � ��$��� ���� �� @� � �� � ���$� ��� ��(�� �� � � � 7 ����N

� ��� C�� D I�$� '.1(� ��� &�� � ������ ��� � ����� �� -� � -�� ��$�� � ��� � � ��

��� C��� D #��� ��� ��� ���������� � ����� � ��� ������� ��0 ���� '�( �� '�( -���� '( 'N

��� C��� D �� 1 ��� E � � � E ��� � ���� 2� � � � 2� � �� ������� ��� � �����

��� '��� ����� � ��� �������� 2�� � � � � 2��

� ��� C�� D @� ������ �� �� � ��� � ���� '�+( ������ ���� '�)( � ����N

� ��� C�� D '?� Q����� 78*4�( #���F� � ���� ��� � �$�� ��� ��� ���'&��� ��� � ��

���N

�� C�� D '/� -����� 7888�( ?������ �� � ���� �� ��� ��� ���� � ��$������ � ��� ��

�� C�� D B���� '�1( ��� ��� �������� � ���������� �� ���� �� � �� � � ������������ ���� ���� ���������� �� �� ���� �� ��� ���� ��� �&$�� ���� ����� �����

��� C�� D ��� ��� ������� ����� '�3( ��� �� ��� ���� � ����� ���� '�*(N

��� C��� D @� ���� ��M����� ������ ��� ������� �� �� ���� ��������N '#��� 1 :�� ����� �� �������� 7�4: ��� 7�4:� 7�:4� 74�:� 7:4�� �74:� �7:4� 4�7:� 4:�7� :�47�(

� � � C��� D <�� 4'( ����� ��� ������ ������ ���� � � � ��$���� �� ���� � �����

�( I�$� ���� 4'( � �� � ���� �� ��� 4'( � �� 4��� ���� �� �$����( ?$�� ��� 4'( ���� 1 4�� � � 4�� '4� E 7(��� ��� '4� � 7(���( #��� ��� 4'4�( ��� 4' :(N ����� ��� ���� 4'5 E �( � 4'( E ��

�� C��� D ����� ��� ������� :8� ��$� ���� 4'( 1 �� E 5'�� ��(�

Page 61: The Art of Computer Programming - Bitwise Tricks and Techniques

;= ���������� �������� ����� *� �"

7��(�#�(�� �0�� ��� �� �� ���M������M�������� ��� ���� ���� �!��!������� � ���' ��0���������������!���' !�(���(����������(�� !���' !�(���(��������/!��/!�-���!0� ��-�� � �����0&���K# ��-�����M ��-�� � �����0&������0 �����������!����0 ��������

�� C�� D <�� � �� � ������� � � � � ��� Q��� ��� ��0 ���� � ����� '6�� 6�� � � � � 6����U6���� � � � � U6�� U6�( � � ���� ��� ������� ���� ����� ����� '*0( ����� � �� �� � �������� ��� ���� ����� 7 �� ��&��� �� ������ '�( �7 1 � � �6 � '�( �7 1 '� E �( �� ���C/�� ����� �� �� ������� 6� � ,��� ��� U6� � ,���� � ���� '*0( �������� � Q��� 7�6��� '�1(� %��� ���� ��$������ �� 1 ��� �� ��� ������ ��� � 1 �� � 7 � ���� '�(� ��������� '�( �������� � ��� ��� ����� ����� �� 1 '� � �( E '� � '�� � �((�D

�� C�� D Q��� ���������� ������� '6�� 6�� 6�� 6� 6�� 6� U6�� U6� U6�� U6�� U6�( ���� � ��'*0( � ��� � ��� ������� �������� :���� ���� ������� ����� � ��� ������������������� � 1 '����������(�P '�( �7 1 '����������(�6 '�( �7 1 '����������(�6'( �7 1 '����������(�6 '�( �7 1 '����������(�� C���� '�( �� ����� � G������ �� ��V�H ��� �� �� ����� '�� � � � ����� � � � ����(� ��� '���� � � � �������(�6 ��� '�(��������� �� *� * ������ � ����6 ��� '(� ���������� ��������� � 7 � : ������6 ������ '�( ������ �� ������ ���� G���� Q ���� ����������H ��� ������� :� �:"7:�D

� �� C��� D /�� ���� ������ �� ������� 5� ��� ���� � �� G��� �� �� � ���� ������ ����� �������H ��� �� �� ����� �7 �� ���� ���� ��� ������ ������ � �� � �����7 1 '������� � � � ������(�� ����� 8 �� � ���� ����� � �� 7� � � � � % � 7�� I�$� ���� ��8 ��� � ����� ��� ������ ���� ����� � �� �� �� �� ������� ���� ��� % � � �������� ����� ���� ��� ���� ���� ����$���� ������ � ��� � � ���� � ������� 5��

�� C�� D '-� #� =����� 78*5�( �� �� � � � ��� ������ �� ����� �� ��� ���������� ���� � � ��������� ��� ���� �� �� �� ��������� �� ���� '��'� � 7((������ ��� � � � ����� #���� � ��� ����� �� ������ ���� � 1 ��

� � C�� D � ���� �� � ��� ������ �� ����� �� ��� �������� � ���� � �� ���� ���������� I�$� ���� 7*%E� ������� �������� � � � � ������ �� � � �������� ���� 1 ��6 ��� ������ � ���������� �� �� ������ ;���� '���� �/!( � �� � '���� ��/!(�

� C�� D � ����� � ��� � �������� � �� 8 ��� ������ �� � :���� ���������

�� C�� D I�$� ���� ��� ���� ����� � �� �������� �� �� �����J�� ���� ��� ������� '��( � Q��� 7� �� ��� ������� �� ���� �� ��� %�'�%�7( � ��� ������� ��� ���$��

� �� C��� D /�� &��� % � ��� � ������ �� ��� �� ��� ���� ����� ������ � '��(������ � 7������ ���� � ������� � � � � ��� &����� � ���������� ���� ��� ����� � ��������� ��� �������� ��� ���J���� ����� �� ���� ���� �� % 1 4�<�� ( 1 ��� /���� ( ������ ������� ���� ��� (%�� ����������� � ������� G,���� � ����H /�� � ���� � ���� ������� ��� �� �� ��� ��� W � ��� ���� ������ 9 � � ���� �� �� �����'�9� 79� � � � � '( �7(9( �� �� �� � ��� ����� � �� ,���� � ������� ��� ��� �� �� ��� ���� ��� '�� 7� � � � � ( � 7(�

#���&,*-

#�������&�,�*�-�

�( I�$� ���� W 1 ����� '/� � �� W 1 (%�� � ����( R�(

�( I�$� ���� � ���� ����� 9 � �� 7� � � � � ( � 7� ������ � W �� ��� ��� ��

� �� �� 1 � �� �� ��� �9 � � 1 �9 � � ������� �9 1 �9 '!(�� ��� � � �� � � ( ��� ��� � � � � %�

( �������� ������ '!( � ��� �������� �� ��� � � �� � � ( P

-'�9 � �9( � �'� � �( ������� � 1 � �

�( <�� � �� ��� ��� � ��� ���� ������ : � �� 7� � � � � ( � 7� � � ���� �'� � �( 1�'�: ��:( �� ��� � ��� �� '/��� �� ��� ��� � �������� � ����� �������� �� �������� 7:� �� � ��6 � �� ��� ��� �������� ������� � ���� ��� ��� ���������� ����� �� � ���( I�$� ���� 9 � W �� ��� ��� �� :9 � W �� ��� : � � �

Page 62: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ;*

�!������� ��-��0�����0 �������7������ %������� �� �&���# �!�������F��� ���������(#��!��(��(#��!��( !���� !�� :����!��(�8����0 � ��(#��!��(� �� ���M��0������(��!��������������0����!�����0���%���%0����

�( � ���� 9 ��� 8 ��� ���� ������ � W ���� ������ � ��M����� ��������6 ������� �9 �1 � ������� �8 1 �� �� � � � � ( � I�$� ���� 98 � W�

� C��� D =�$�� � � � � � � ( 1 ��� �� ���� ,������ ����� ���� ������������ ��� � ��� �����$�� C� � � �DN '/� � �� ���� � �� ��� � ���� � 9 � W � ����� �9 �1 � ������� � � � � �� ?������ 5*'�( �� ��� ������ ��� � 1 �� � 1 ( � 7�(

�� C��� D =�$�� � ����� ���� ����� � �� 7� � � � � ��7�� ��� ��� �� ��� ����������� ���� ����� ��� �� ���� � ��� ��� ������� �� ��� &��� ��� ���� � ��� � ������� ����� ������ � '�( ���� �����J��� ���� ���� ������ �� ���� ����� ��� �� ������������� ���� ��� �������� ����� ��� � ���� '��� '*.((� #��� �� ��� ����������� ����

���� �����N #��� ��� ��� ���� ��� $������ � ��N

�� C�� D �� �� %I����� � ����� ������� � ��$�� ���� ����� �� �����J���� ���� ������� �� ���� 6� 1 �� ���� ��� �� ���$� ����� � Q��� 7� �� ����������� �� '*0(N

� �� C�� D <�� ( 1 ��� #� �� �$� ��� ��������� � ���� ����� 7 � �� 7� � � � � ( �7��� ������ � ����� � ( � ������ % ���� ���� #��� ���� ������������� �� ��$� ����������� � � 1 �7� ��$�� �6 � � �� ����� W'(( ����� � &�� � 1 �7� ���� � �� ��$���

��� ����� ���� ��� ���� �� �� � ������ �� �� ��������� �� ������������� ����� �� � � � ��� ���� �7 ��� �7� ��� ��� �� ����� �� 5'%( ������

�� C�� D Q� ���� �������� ;� �� �� ��� � ��� ��� J����� � ���� ������� '�( �"� 1�"�N '��( '�"�(�� 1 '�� ����("'�������(N '���( '; "�(3'� "�( 1 ';3�("'�3�(N

�� C�� D Q��� � G������H ��������� �� ��� J��������� �� '� E ��( " '� E ��(� �� �� ���� � � 1 � " � ��� �� 1 �� " ���

� C��� D /�� ������ �������� �'�( 1 �� E ��� E � � �E �������� '�� �( �� ��

����������� �� ��� ������� � 1 '���� � � � ����(�� �� �'�( ��� &'�( ������� � ��������� ��� & �� ���� ���� ���� �������� �������� � � " &N

� � C��� D � ���� ��� �������� �'�( ��� ���� ����������� �� �� ���� ������� � ���� ������� 5� ��� ��� & 1 � � '� � Æ(� '� � �Æ(� '� � 4Æ(� � � � �� ��� ������� Æ�

�( #���F� � ������ ��� � ������� ��� �������� &'�(N�( � ���� �� ������ ��� ��� ���� � � ��$� ���� ����� ��� :���� ����� @�

� �� � �� �� & ���� Æ 1 7� ���� ������� �������� �� :���� ���������N

( ������� ��� ���� 0 ����� �� '�(� � � ���� Æ 1 :�

�( ������� ��� ���� 0 ����� �� '�(� � � ���� Æ 1 4�

�( ������� ��� ���� 0 ����� �� '�(� � � ���� Æ 1 ��

�� C��� D �� �'�( �� � �������� � ������ � � ����������� �� �� ������� 5� ��� ����� �� ����� � &'�( 1 �'�(� �� '�� E �� E 7(� ���� � � � � ��� ��� ���� ��� ��� ����� /��� ������ ��� �� ����������� ������ ���� ������ �� X����

�� C�� D #��� ����� ���� ����� ���� ��������� ��� ������ �������� '*3(N

� C�� D I�$� ���� ����� '1/( ������ ������� ��� ����� ���� ���� ��� ����� 6���$� ���� ��� � �������P #� ��$�� ����� ��� � ��� � ��� ���� �� �

� ��� C�� D '= � <� ������ L��� 788:�( #���F� � �� ��� � �� �� ��� ����� 6�� 6��� � � � 6��� ���� ��� ������ �� ��� ������� �������� ���� �� '1/(� ��$�� <N

��� C�� D ?������ �� � $� �$�� ��� ���� �� � '1/(� ���� ��� ��� ���� $�� �� 1 '���� � � � ����(� � � � ���� � 1 '�� � � � ����(� ���� ��� ��� 1 �� �� � � � � =�

��� C�� D �������� ��� ��������� '�"�( #,�� ���� �� �������

� '��� ?0�� '*�( ��� '10(�(

��� C�� D I�$� ���� % �������������� ����� ���� ��������� ��� ������ ���� ������

Page 63: The Art of Computer Programming - Bitwise Tricks and Techniques

;< ���������� �������� ����� *� �"

����0E��0�(�����!�����0 !���(�����&� !���(!�����0 ��-�������0 ��-�������&����� ��-��+ � !�����0 ��-���!������� ��-���(�#� ��������0 ��-�����"����������� ���S����!�'�!�( ��� ��&��������� ��5�������� ����!�(��������� ��� ���0�������0!��� &���������0+ � �������0

��� C�� D =�$�� ��� '��� ��� � � � � �����( �� ��� �� ��"#�� ���� ��� ������� ����� ���������� ��� 7������ �� ������ ��� � ��� ��� '���� �

��� � � � � �

�����( �� �����

���� 1�

������� �� � ������� ��� �� ���� � ������

� �� C�� D /�� ����� � �� �� ��� #�� ��������� ��� � � �������� ������ �������� � � �� ��� �� ��� ��� �� �������� ����� Q� �������� ��� ��� '��� � � � � ��( 1'7� �� �� �� �� �� �� 7( ��� ������� �� ��� ���� ��� �� '������������(�� �� ������������� ���� �� �� � �����$������6 �� ����� ������ � ��$� ��� ���� ������ ������������ ����� ������ '������������(� �� ���� ��������

I�$� ���� ��� ���� ����� ������ � '��( � Q��� 7� �� �� ���&�� � ����$����� ���� ��$�� ��� ��0 ��� � ��� '��� ��� � � � � �����(� �� �� ������ ��� % � ����

������ �� ��� �� ��� ���������� ���� �� ������� ��� ��--��' � �)���� '! �������� �� ���� ��� �� '�� �( ��� �� ������ '�� �( � '�� �( �� �� �6 � ������� �� ���� ��� ��� � '�� �( � '�� �(�(

�� C�� D ! ��--��' ���� $. �� ����� � � � ������ ������ � � ���� ������������ � � �� ��� ��� ������� �� ��� ������� � �������� � �������� ��� ���� � ����� � �� ���� � �� � ��� � ������� �������� � ��� ��� ��� ?������ �5��� �O ���� ���� Q��� 7�� ���� ���� � ������� ������ �� 1 �� ������ ���� ���:%�� ��$��� � ������ ��� ���� �� �� ��� � ��� ��$��6 � ��������� ���� ���� �������� ������� � � � ������� �� ��� '������� � ������ �������( �� ��� % � ������$����

/ ������ 5'(� ���� �� ��� �������� � ���� >'( � �� ��� ���� ��� � ����� ��������� � ������� �������� ������� ������N

��� C�� D '-� #� Q��� ��� T� -� I�����( +����� �� �������� ���� ����� �������� �� � ��$�� �������� ������� �� � ������ ������� �� ��&��� �� ��� ��������� ����� 5�4�:� #��� ��� ��$�� ������ ��� = ������� �� ���� � � ���������� �� �� 5'=( ������� �������� � ���� � ������ ���

��� C��� D '/�����' ���0 �������+( � ���� ��� ������ � ����� ��� ��� � � � � �� ������������ ���� �� � ��$���� � � � ��������� � ���� ��� �� �� ���� ���� ����� L� @�> �� '� �� ����( ������ � ���� ������� ��� ���� ��� ���O��� �� ������� ��� ������

�� �� � � � �� 1 '�� E �� E � � �E ��( �� ���

I�$� � �����$�P > ��F� ���� �� $���� �� ��� ��� �� � � ��'� � 7(�

� � � C�� D �� � �1 � ��� � � <� ���� �� �� ���� ��� � ��������� ��� ������� ��������� � � � � ���� �� � <N '/� � '��(

� 1 '��(� 1 �� �� ������ ���� '1�(�(

��� C�� D � ����� � ���� ��� � &�� ��� ������� ����� � ����� � � ���� B�� �����������$�� < ���� '< 1 �� �� ���� � &�� ��� � � < � � ���� '� 1 � � 7�

��� C�� D Q��� � ��� �� �� G�������� ��M������H � � ���� ��� G�������� � �H '1�(�

��� C�� D �� �� ���� � ����� � �������� � � ���� � ��� ���� �� 7� �� ������� ������ '���������������(� � '��������������(�N

� ��� C� D ����� ��� ������� *�� &�� � ��� � ����� � �������� ������ � � ���� ���� $�'&� �� 7� ��$�� � ��� <� �� 5'%( ������

��� C�� D =�$�� ���� � ����� � 1 '���� � � � ����(� ��� < 1 '<��� � � � <�<�(�� ��������� � �� ���� ��� G��������H 0 �������� � ? < 1 '�������� � � � ��������(� ���� @ < 1 '�������� � � � ��������(�� �����

� ? < 1 ��� � � � � ��� <� 1 7�� � @ < 1 ��� � � � � ��� <� 1 7�6

Page 64: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ;?

�����((��������0 �((����������(�7��0 �� &�����0 ��(������ ���(�-��� (���������!�(��&#� ��&������������ ����=��7�����+ :%&���7�0��0������0 �� �� ���� �����&���� ������0�(��� �����(���&���������������K�0���!���

�� ��� ���� 1 � �� <� 1 � �� � � � � �� ��� ���� 1 � �� <� 1 � �� � � �� Q��������� �� 1 77 ��� < 1 '�77�777��7�(�� ���� � ? < 1 '��������������������(���� � @ < 1 '��������������������(��

�� C�� D 'A� +� /���� 785:�( ������� ���� � ��$� � $������ 785�� �� ������� � �� � ����� �� ������ ����� ��� ���� � ���� � � ��� �� ���������� � 4� � 4� � 4� ����� �C�� �� �D� ���� � ������� ��� 5���� �������� �� ��� ������ � �� �� � � 4�� Y���� ������ � � ������ ��� ��� � $��� ����� ���������� �����PZ �� ���� ��� 7�* ��� ��$� �������� � ��� ����� �� ���� ����� �� ��� ��������� � � ��������� � ���� �$�� ��� �C�� �� �D � � ���������� ������ �C��� ��� ��D������ � � ��E � � ��E � � �� 1 7� � ��$� ������ � ������ ��� ����� � ����� ��� 1 '���������(�� � 1 '���������(�� ��� � 1 '���������(�� ��� ����� ����� �C�� �� �D ������� �� �� � ����� '���������������������������(�� ;� ��������$��� ��� ���� ������ ���� � ����� ����� � �� �� � � ���� � �� ��� � ����� ����� �� ��� ��������

+�� �� ������������� � ���� ���������� � ����P '�( @� ��� �� ����� ������ �� � � ������ �� $7N '�( @� � �� � ������ � ����� ���� � �C�� �� �D� ��$���� �� ��� �N '( @� � �� � ����� � G���� �� ��H '������� ��� ������ ���� ���� ������� � 7�* �������� � �� �� ������� ��� ���� ����� ��� ��� �� �(N

�� C��� D !� ����� � �� � �� � �� �������� �� � �� ������� �� � ����� �C�� �� �D��� � ����� ���� ���� ��� ��� � E A E = ���� � '�� �� �(� ���� ��� �� ��� �������Q ��������� ���� ����� �� � �� ����� �� �� �������� ����� ���� ����� � ��J� � �'?������ *5 ������� ��� ��� � 1 A 1 = 1 5 ��� 4 1 ��( #��� ������� ��������� ���� ���� ������J�� ��� � ���� � ����� ���� �C�� �� �D �� � � ��M����� ���� ����C��� ��� ��D� � ���� $�� ��� �� �� �� ��� ��� ��� �� � � ���� �� ��E ����E ���� 1 7N

� ��� C�� D � ���� ��� ���� � � :���� ��� � ������ �� !���� �� ���� ���������������� � ������� � ������ � � ����� #��� ����� ������� �������� ���� �$��� ��� ���������� ������� � �������N

��� C�� D =�$�� � 1 '�� � � � ��(�� ��� � 1 '�� � � � ��(��� �� �� � 1 '�� � � � ��(�������� �� 1 '�� � ��( �� �5 �� � � � � *� '��� ��� ������� ������� �� '1*(�(

� � C�� D =�$�� � 1 '�� � � � ����(� ��� � 1 '�� � � � ����(�� �� �� � 1 '�� � � � ����(������� �� 1 ������� �� � � � � 4�� ��� ���� ���� � �� �� J���

�� C�� D /�� �������� �$������� � �� '11( ������ � ��� ������� ���� �� E �� ����� B��� �� ���� ������ �� � ����� � ��� ������� �� ������� �� � � �����

� �� C�� D '1�-&� "&������+( -���� '11( �� � �� ��� � �� �� �������� �$�������� � ���������� � �� ��� ������� ���� ��0 ��� � ��� ������� �������� � *����$�� ��� =�$�� ����� ������� � 1 '�� � � � ��(��� � 1 '�� � � � ��(��� � 1 '�� � � � ��(������ ���� ������� �������� ���� � � �� �� � 1 '�� � � � ��(��� ����� ��� ���� ���� � �� ����������� � ''�55���(��E����(��55� ���& )� ���� ��� � �������������������� � � ����� ���� ���� ����� �����

� �� C�� D #��� ������� �� ��� ���� ���� � '11( �� ������ � K� � '� �(� �FN

�� C� D #��� ���� ��� �� �� � ������� �� ����� � � ��� �� '13( �� �������N

�� C�� D <�� � 1 '�� � � � ����(�� ��� � 1 '�� � � � ����(�� �� '3/(� ��� �� �� ��J������ �� �� ��J��N ��� �� �� J�� ���� �� �� J��N

� C�� D #���F� � ������� ��� � ���� �� ��� ����� � � 1 '�� � � � ����(�� ��� �������N

� C�� D ?������ '3+(� ��� &�� � ������� ��� �� ���� ���� ���� V��� �� � 7�*C�� � �� D�

�� C�� D <����� <�����F� ����� �� 78�5 ��������� ��� ������� G������ ����� ����� �� �� ������ �����J���� ��������HP =�$�� ������� � 1 '�� � � � ��(�� ��� � 1

Page 65: The Art of Computer Programming - Bitwise Tricks and Techniques

=5 ���������� �������� ����� *� �"

!�(��&#� !�' ��� !����!������ � &#��&#��+ �����0 (���7 �� � K�0�&���#%���� ���!�(���' ���7������!!�'�%���' �����������(#��!��(� !���(� @���#!�'!�������0 ������0�����!��E�((��

�! =&���# (�0=-�='���� �� !��� ��0��6���� &������&���-���( �������

'�� � � � ��(��� �� �� � 1 '�� � � � ��(�� ��� � 1 '�� � � � ��(�� � ���� �� �1 � �� ��� ����� �� �1 �� �� �1 010� ��� �� �1 �� 6 ��� �� 1 '�� 1 �N �� P '�� �1 010� �� �1 ��N 010P ��((�

�� C�� D =�$�� � 1 '�� � � � ��(�� ��� � 1 '�� � � � ��(��� �� �� � 1 '�� � � � ��(����� ; 1 ';� � � � ;�(��� ����� �� 1 ���'�� � ��( ��� ;� 1 ���'�� � ��( �� � � � � *�

� � C� D Q��� ���������� ������� �� �� �� %� 2 � � ���� ��� ��� ������� ��������

� � � � �� � � ''''� 3 �( E �( �(� %( 3 2

���� �� �� ��� V��� � 1 '�� � � � ����(���� ��� ��� ����� � 1 '�� � � � ����(��� �����

�� 1 C��1 020D� �� 1 C�� �1 010D� �� 1 C�� � 0&0D� � 1 C� 030D� �� 1 C�� � 0�0D�

� 1 C� � 0#0� 0$0� � � � � 040�D� �� 1 C�� � 7 *D� �� 1 C�� � 050� 060� 070� 080�D����� C�� D � ���� � 1 '�� � � � ����(�� ��� � 1 '�� � � � ����(�� ��� %���$�#" ��� ��"#���� � ������ ����� � � �� � �� � 7� �� ��� �� ?������ �� � �� �� ����� � �� 1 '�� � � � ����(�� ��� ��M����� & 1 '&� � � � &�&�(��� ����� � � �� � &� � 7� ���

'�� � � � ����(�� 1 ,'�� � � � ����(�� E '�� � � � ����(��.�� 7����

'&� � � � &�&�(�� 1 ,'�� � � � ����(�� � '�� � � � ����(��.�� 7����

���� � �������� � � ��� ����� �$������

� ���� C�� D /� ������� � ��� � ����� �� ��� � ����� ����������� �� &$� &�������� �������$��� ������� ���� '4 �����(� � �� '7 ����(� ��� ��� '7 ����(� �����'7 ����(� ��� ���������� '� �����(� ��� � ��� ��� � ����� ���� 0 ����� ���� ��$������ ��� ���� ����������� ������������� � ������ ��� ��� �����N

���� C�� D +�� �� � ����� �� ��� ������� ��� � ������� � ��������� �� � 5����� '�( 7 :���� ������ � '�( �7 4���� ������ ��� ����� ��� � :���� ����

� ���� C�� D �������� ��F� �$������ � ��������� ����� � ����� �� )��$� ������� ����� �� 7� �� 4� � � � � � ������ �������$��� �� '�(�� '7(�� '77(�� '777(�� � � � � �� � 7 ��������� �� ���� /��� ��� ��� ��� ��� ������ ����������� �� ��� 3�

� ���� ��� ����� � � 1 '�� � � � ��(�� ��� � � ���� � ������ ����� ��� ������ � 1 '�� � � � ��(�� ��� ��� ������ � � 7� ?������ �� � G���H � � � � G� �����H ���� �� ��$��� � 1 '�� � � � ��(�� ��� & 1 '&� � � � &�(�� �����

�� 1 ���������� �����"�� � 7 ��� &� 1 �� ������� �����"�� � 7�

���� C�� D Y�� ������� �������� � ��� ��� $������� � � ���� ����������� �� G�������������H &���� '�� �� %( �� �� '))(� Z �� �� �� �� � $�� � � ���� �� J�� �� ������ �� 78�� � � � �7��� 7 � � � 7�� ��� 7 � % � ��� ���'�(� ����� ���� � ����� ��� ��� ���'�( ����� ��� �� �� ��� �� ����� ���� �� ��������N

��� C�� D =�$�� � 1 '�� � � � ��(�� ��� � 1 '�� � � � ��(��� ��� �� ������� ������������ ���� � $� ��� ����� ��� ����� � ���� �� � �� � � � � � �� � �� �����������

��� C�� D ?������ ��� Q������"#������ ���� �� '3.(� !�� ��� ���� � ���������&���� � ����� ����� ���� �� �� �! ���� � ���� ��� ���� �������

� ���� C�� D ��������� !������� ; � ���� ���� % 1 :� ��� ����� �� ���� '.�(�

���� C�� D !���� !������� ; � ���� ����� ��� �� ��$� ��� ��� % � ����� � C�� D ?$�� ��� �� �� ���� � ����� � �� 5'�� ��( ������� ������

Page 66: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� =

'���� �� !��� ��0��6���� &�����������0 &���-�� �����&���-�� �����+ ����0:%���� ������������( :%���� ��!&�0�(� (��0��0��� ��&�����!����

� ���� C�� D � ���� 1 ���

��� � � � � � ��� �� � �� �� 7 � � �� 5'2(������� ������ ���� ��� ����� ������ ���� ����� �� � ������ �� ��� '/���������� !������� ; �� �� �������� ������ ��� ��� �����&��� ��� � �� ���� � ������ 5'�� ��( � � ������(

���� C�� D ?������ ��� �7� ������� �����J��� '31(�

���� C�� D ��� ��� ������ � ��� ������� 7�� �� ������&�� �� 5'7( ������� �����N

���� C�� D ! ��$ �' %$ ��� $� "&��� �� � ������� ���� � � ����&�� ����� ������ ��� � ����� ����� �� ��� ���� ���� � ��� Q� �������� ��� ����� ����������� '��� ��( ���� �� 1 �� E 7 �� �� ����� ��� �� �� 1 '77(� ����� �� 1 '��(��; � '��� ��� � � � � ��( �� � ����� ������� ���� ���� �� ��� '�� E 7( �� : �� ���� � �� � : �� �� ��� �� 1 �� � 7� �� 1 �� 3 7� � 1 �� � 7� ��� �� 1 �� � ��

=�$�� � ������� ���� '��� ��� � � � � ��( � ����� � ���� � � ����� ����������� '���� �

��� � � � � �

���( � ��� ���� ������ � � ���� =� 1 5'=( ��� '��� ��� � � � � ��( �� �

� ���0 ��� � '���� ���� � � � � �

���(�

���� C�� D � ���� '��� ��� � � � � ��( �� � ����� ������� ���� � ����� ���� ��� ��� ��� $�� � �'�( 1 �� �����$�� �� ���� � ���� � 1 �� �� ��$��� ����� � �������� ���� '��� ��� � � � � ��( � ����� � ���� �� ��� �� 1 '�'B�( � � � �'B�((��

�� ��� ��$�� ����� $�� � �� 1 'B� � � � B�(�� � ����� � � B�� � � � � B� � ���

� ��� C�� D =�$�� � ����� ������� � 1 ' � � � ������(�� �� ����� ���� � �� �� � 1' � � � ������(� 1 �'�( ��� � �� J����� � ��� ���� � ��� ��$� 7� ���� '�( ����� ����������� ������ �� �� ��6 � '�( ��� ������ �� �� �� � ���� � ������� ��� ���� ��� � 7� ������6 � '( ����� �� �� � ���� � 7�� Q� ��������� �� � �� ' � � � �777�777��77�7���77�(� ���� � �� '�( ' � � � �����777�����7���77�(�6'�( ' � � � �����777���������77�(�6 '( ' � � � ����������77�����77�(�� '��&������ ������ ��� ��� ��� � ������ �� ��� ����� � ��� /� �� �� ��� '�( �� ��$�

�� 1 �� � ''2�����2����( % '�����2�����2���( % '����������2����2����( % � � � (�� ��� �� ����� �� 1 � �� � � ��( Q��� ����� ����� �� � �� ��� ����

��� C���� D � ���� � 1 ' � � � ������(� ��� � 1 ' � � � ������(� 1 �'�(� ����� � ���� ����� �� � ����� ���� ��$��� � ����� ��������� <�� C �� ��� ��� � ��� ������������� � � ���� �� 1 C�� � � � ���� �CD� ��� ��� �� ���� ��� ������� ��� �� ��� ������� ������� ����� � ������ I�$� ���� C �� � ��� ��� ���� ���� #��� ���� ���� C������� � ��� � ����� �� ������� 775'�( ��� 775'�(N

���� C���� D ����� ��� ������� 77 � �� ����� ��� ������ ��� � ��������J� ��� ���� ��� ���� ���� C ���� ����� �� ���������� ����� �����N '/�� ���� ��� C 1 ��'7��7��(�

��� �� ���� � ������� � ��� � � �����(

���� C�� D !����� � <���� !� �� ���� �� �� ��� � ���� � � 7 �� ��� ���� � ����� � �� ���� ��� ��������� � ��������� ��� ������� ;���� ��������'� ������ � �������(� ���� ���$��� ���� 5'( � � �������� ��� �������� ���� ���� �� �� ��� �� ��� ��� G�� �H ������ �

�� � �� � ����������

�� � C�� D ?$�� ��� ��� � ���� ��"'�( �� '0/)( ���� � � ������� ������

� ���� C��� D /���� ��� �����

� ����� ���� ���� ���� � ����� '��� � � � � ��( ��� ������ � ���� �'��� � � � � ��(� @� ���� � ���� �� �� ����������� ���� ��������� �������� � ����������� ��� �������� ������� ;���� �������� '�� � ��(N

� ���� C��� D ;� ������� 4�7" � � � ���� ��� C� � � ��( ��� ������ �� �$��� ���� �������

Page 67: The Art of Computer Programming - Bitwise Tricks and Techniques

=! ���������� �������� ����� *� �"

���� (�0��!�(���(#��0&���-�� �����'������0 �� !��� ��0��6���� &��&���� ��,���-�#� ���������#!!��� �����������# �����������(� (���0��� �(0����!�=�(�8��=0��� ����������� ���������!�'�!�(,���#��((����"����# !���'

�( I�$� ���� �� � �� ��� ���� ������� � ���� ���� �� �� ����������� ���� ������ ����� ����� ��� ������� � ��� ������ ��� ������ ����� � ��

�( @��$��� �� �$��� � ������� 7 ��� � �����F� �� ���� ������� ���� � ������ 4���� ��� � ����� � ������ ��

���� C��� D ������� ��� ��� � <���� ;�

���� C��� D <�� �� �� ��� ������ 7 E �� E ��� E � � � E ������� 1 '���� 7(�'�� � 7(�

Y���� '0/�(� ��� ���� ����� ��� ��&������ ���� A � � ���� ��� ������� � � ����������� ��� �� � ��

�� ��0 ���� W'�� A( ����� �� ��� ���� ������� ���� ���� � A��

���� C�� D ������� ��� ��� � /����� -� �� ��&���� �� ���� ������� ����'��� ��� � � � � �# ( ��� ���� 'D�� D�� � � � � D# ( � � ����� �� � � � � � � ��� ��� �� � � D$ ����� �� ����������� ������� ����� �'�� �(� �� ��� ������� �����P '�( /�� ����� ����� ����� �'�� �( ��� �� ������ � �� '��( �� �������� =� ��� � ���� $�� � �� �'�� �(� �� ������� �� ��� ��&���� ����� �� � �� '���( �� ����� ����� E C�D ��� ���� ������� ������ �%�� �� ��� ��&���� ����� ��� � �� '/�� $�� �� � �� ��� ��� ������ � �� ����� �� � � �� � ��( Q �������� D$ � ���

���� ��� ��� ������ ���� � ����������� =� 1 �� ���� � � � � ����� <���� ; ������� ���� � ������� � ���� � ������� ��� ��� ����� ��������� ���� � �� �������� ���� � �� ������

��� C��� D I�$� /����� I�� ����� <���� ; ������� �� � �� �� ������ K1 �F ��K1 � F �� '0/+(� �� ��� $�� �� � �

��� C��� D +�� ��� ������� � ��������� ��� ��� �����&��� ���� �! � ��0 ���W'�� ��( ����� �� �� ���� ���� -!BN '��� ������� 77��(

���� C�� D I�$� ���� �� �����F� � ��� � ���� � �������� ������� � ���� � ������� 5'�� ��( ������� ������ ���� � �$� �������� � ���� � � � ����F� ������ ��� �� ��� �� 5'�� ��( ������� ������

���� C��� D +�� �������� ������� ��0 ��� W'��( ������� �����N

�� � C��� D ��� ��� ������ � ���� ''�( �� � �� �� ��� �� 5'7( ������������N

���� C��� D �� ����� �� ���� ������ � � � ���� ��� � ���� '���( �� �� ��0 ����W'��( ���� ������� �����N

� ���� C�� D #���� �� ���� ������ �� !������� - ���� ��� ����� �� ����������� ���� ������ T����� ���� ��$� �� ����� �� &����� ����� 9�:; ��� &!(<� ��� �� ���� ��$�=� ��� :"�= &����� �� ��������� �� ����� �� ��������� ��� 9�:; &���� ��� J��� ������� ��� ��$�� ��� � $������ �� ���� �� ����������� �� � �� ��� ����� Z � �������� �� ����� ���� �� ��� ���� � ���� �� ���������� ��� ��� � ��� �������� $�������

� ���� C��� D ! "��2)� �� � ����� �� � ��� � � � ���� ��O���� $������6 � ��0 � ��������� �� ��F� �� ������� �� ��� ����� /�� � ���� � ���� ������� �� � ��� ���� �������� � � � L� A� B� B�� ��� L� @����� ���� ��$���� � �$������ ���� &�� �$��� ������� ��0 � � � ���������� ������ ���� ������� ���������

� ���� > �� � ����� ���� $������ F 1 �� 7� � � � � � 7�� <�� �& 1� ��

� ��� & � � 1 &� �� �� & � >F� ��V���$� ��O���� ������� ��� ��� Æ& 1� ��

� �1 &� 1 �� � 7 � �&� ?$��� � ���� D � F �� ������������� �� �� ���� ��������'D( 1

��' ��6 �� �������� Æ& 1 �'F � &(� #� ��� ��&�� ��� ������� ����������

:'D( 1 ���(�

'� � DN ��P �(�

Q� �������� �� 1 5 �� ��$� :' �� ��( 1 �� 3 Æ� 3 �� 3 Æ 3 Æ��

Page 68: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� ="

�������� ���7�' ��7�!�����0� � ���# 7�(��O������-��F��%7�(�� (�0���0����������&�(��#������#8��7�(��!�(���(������� ��&(� � 0�������0�������+ !�(� ��&(� ������:%&�� ������0��( ���&�(���� ���# ��!&� �(( ����(�! ��!&���&��&������ ����&�� ������! �!�(������������������&������0��&�� &�����&(��0���-�#� ���=

�( I�$� ���� D �� � ��0 � �� ��� ��� �� :'D( 1 �'D(��( ��� ���� �� :'D( 1 �'� ( ���� � �� � ��0 ��( Q� 7 � � � � ������ ��� �� ������� �����������

#� 1��

��(�'� � DN ��P �(

��� D � �� 7� � � � � � � 7��

��� ��� #�� �� ��� ������� �������� � #�� I�$� ���� D �� � ������� ��0 � ��

��� ��� �� �'D( � #�� �

�( ?������ �� � �� �� #�� ��� #�

���� �������� ���� #�� 1 �� � 7�

� ���� C�� D =�$�� � ����� >� �� �� ��� �������� � ������� 74� �� ��� � &��'�( ��� ������� ����������� ���� � $������N '�( ��� ������� $����� $��� '���� ������� �$��� ����(N

���� C�� D %��� ������ � �������� �� ������� $�� �� ������ �� '003(� '0)+(� ��� '0)�(�/ ���� ���� ��� ��� ������������� '0)1( ������ �� � 1 �� � 1 !� � 1 7N

��� C�� D [< �������J ��� ��� � ��� �������� ������� '0)*( �� ��� ������$�� �� ���P&� '�������( ����������� � ���� 7 � � ���$�� ! �������6 '� '����������( �� ��&����� &� ( �6 � '��������( �� ��&��� �� &'&�6 ��� � ) � '�0 �$�����( �� ��&��� ��'�(�(� '�(�(� ?������ �� � ������ ����� �������� ���� ������������� '0)1(�

��� C� D � ����� ������ ������� �� ������ �������� � ��� ��� �� �� �� ���� �����&��� �� ��� ������� G� ���������� ������HP

'�(

�� � �� � �� � �

�6 '�(

�� � �� � �� � �

�6 '(

�� � �� � �� � �

��

���� C�� D ��� ���� ��� ������� �� ������� 74 '( �� ������� ���� ����� $�������� '0+0( ���� ���� ��� ������ ��� '0+/(�

���� C�� D Q��� �� ������� � �������������������� ������ ����� ���� T� �� �����

�� � C�� D �� � ��� � ��� ������ ���� �� E7� � �7� ���� ����� ������ �� �� ���� ������ ����� � � '����( 1 � E �� ����� �� ��� �� ��� ��� ��0 ���� � �� ����������N '/��� �� � G���� �����H �� ������� ������� � ������(

���� C�� D +����� �� ������ ()�� ����$ �� ������� ������� � �����P ��� ��� �� �� ������ ���� � ��� & � � ���� 4�E& 1 �E�E � ���� �� �� � � ��E7��7��

� ���� C�� D /�� 3��� �)�%�$� *D�� D�� � � � + 1 *7� �� 4� :� � *� 77� 74� 7 � 7*� � � � � � + �����&��� �� � 4 �� ������� D� �� ��� �������� ������� D��� ���� ��� � )��2)�������������� D� 1 D� E D� �� � � � � � � � ��� ���� � ������ Y��� � ������� �� �� ��� ������� ���� ��� ���� � ������� �����0 ���

� ���� C�� D ! � � �� � � �� !7�!7!�7 �� �� ����������� �� �������� ��� 7��7�7����� ��� ��� �7��7��7� �� �� '1.(6 � � ���� ���� ������� ��� ��� �������� #���������������� ����� �� � � ��� ���� ����� �� &����� ����� ��������� �� �������� ������� �������� � ������� ��7�7"47N

���� C�� D <�� � �� � :���� � ���� ���� ���������� �� *� * ��������� ���� � 7 ����� �$��� ������ ����� � ������ �� �������� Q��� � ��� �� �� ��� :���� � ���� �'�(���� ��� � 7 �� �$��� ������ �������� �� �� �$� �� � ������ � �� Q� ����������� ����� ������� �� ��� ����� � � ���� ������� � � 1 �>%6 ���� �'�( 1 ��?$@##�

���� C�� D #��� ��� �� ��� ������� � ��� � �� � �������� ����N '��� '0+�(�(

��� C�� D ��������� '0+*( ���� G �� ���� ���� ��� ������ � ��

Page 69: The Art of Computer Programming - Bitwise Tricks and Techniques

=- ���������� �������� ����� *� �"

�-��0 !���!�! 8�#!���!�! (!�� �� ��&��#&���# ���� ����� ��!!�� ���������7�0����� ��(�#�&�(�� �(�����((���������0���&��������&������ ��!& �#��!����0�������F�����=&��!���====

� ��� C��� D I�$� ?0� '0+1(� ���� ������� ��� � ��� - � ������

� ���� C��� D #��� $�� �� � 7&� H&� �&� ��� :� � �� !������� T ���� ��� ����� ���( ��� ����� ������� ���� $������ &�� � � � � &�� ��� � ���N�( ��� ������� ���� &� � � � � � &� � &�N

���� C��� D #��� ����������� �� !������� T� �� �� ������� � ��$� H� ��

H�� �� H�� �� H�� �� H�� �� � ���� � � �� � �� � \ ��� �� � �� � \�� ��� �����N '�� �� �� ��M����� ����� ��� G���������H �� ��(

� �� � C�� D +����� � ����������� ���� �� �� !������� T�

� ��� C�� D =�$�� �� ����� � �������� !�� � � � � !�� ��� $��'� �����)� 2)�$� �������� � ��������� �'�� �( � � ���� !������ 1 ���'!�� � � � � !�( �� ��� ��$�� ������ � ��� ����� 7 � � � � � � I�$� ���� !������� T ���� ��$� ���� ������� ����� 5'( ����� ������������ � ��� ����� ! ��$� �������� ��� �������� ������ '7� H� �� :(� ����� �������� ��� ������ ����� ���� ���� ��� ��� ��� ��0 ��� � ���� '�'7(� �'�(� � � � � �'((������ � �� � ���� ����� � 7� �� � � � � � � � ���� !���� � !���� � � � � � !�����

��� C�� D ��$������� ��� ���� ��� �������� �� ����� ����� � 0 ����� �� �� ���� &�� ������� ��� �������� ���� ����������� ��� ���� ������

��� C��� D I�$� ���� !������� T �� �����

� ��� C��� D /�� ������� �� � ��$������ ���� ���� '0��( �� �� ����� ��� � ������������ � � ��

� 7 � � 7 � � � � � 7 � 7 � � � � � � � � �� � � � �� �� �� �� �� �� �� ��

!� ���� ��� ������ '��� ��� ����( ��� ��� ������ �� ��� � ���N

��� C�� D /�� ���� ����� �� Q��� 7: ��� �� ��� ������� �� ����� � ������������� #��� ��������� � ��� �������� ����� �� ��&��� �� ���� ���� ���������� ���� � ��� ���� ������� �����N

� �� C��� D I�$� ���� '�I( �� 7 1 '��(��) ���� � �� ��� ����Q����� �� �� ��

�� C�� D +����� ��������� '�( � �$��� � ��$�� ������� � � ��� ����Q������� �� ��� '�( � �$��� � ��$�� ����Q����� �� � � � 1 ('�(�

��� C��� D ?������ ��� �� ���� '0�1( �� ����Q����� ��������� ��� � �����

��� C��� D <�� � 1 �� � � � �� �� ��� ������ �� �� J '��( 1 ��J��� E � � � E ��J�

�� ��� �������� Q����� � ���� ������ '0��(� +�$��� ������ ����� � � '0�1(��� '0�3( �� ����������� ��� ����������� � � �������

� � C��� D ?������ � ���� ���� ��F� ���� � �$��� ������� ��� ���������� ��������� � ���� �������� +�� �� �$����� ������� ����Q����� ������ ��� ���������� Q����� ��� �� ������� 75*�

��� C�� D I�$� ���� '0./( ��� '0.0( ����� �������� �� ������ �� ��� ����������

��� C�� D /�� ���� � � �������� �� �� ���� ���� ��� ������ � ���� �������������� ��$� ��M����� ���� +�� ��� ��������� ��� ��$� ���� �������N

� ��� C���� D ?������ �� � ���� ��� ���������� Q��� 7:� #��� ����� ��� �������N

��� C���� D +�$��� � ��� � ��$����� ��� �� ��� ��������� �� ��� ������ � Q��� 7*�

��� C�� D /�� ������� ��&����� � �����J���� �� 785� ��� �� '0.*( � �

�����'�( 1 � 3�'��� 3 �� 3 ��� 3 �� 3 �� 3 ��� 3 �� 3 ���(�

#�� �� '0.*( ����������N

Page 70: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� =;

������((�(� ����!������ &���-����������� ����� �����((�������0����# �����������0������( ������ ��0�������(�������(��

�� C�� D '-� !� A�����( +�� �� ��� �� ����� � ��� 4�4 ��� ��� � ����� ����

��$��� 1 ����'��$�( 1 ���$� 3 '��$�� �

�$�� �

�$�� �

�$�� (�

�� C��� D <�� �'E� (( �� ��� ����� � � ���� � ���� ������ �� �� E � (������ � �� ���� � 1 ����'�(� I�$� ���� �'E� (( 1 �

E( E 5'E E ((�

��� C�� D '4�(�+( �� ��� ������ � ���������� �� ����� � ���� ���� ��� ������ ���� '�(� ���$� '7(� ��� ;���� � ����

�'���� � � � � �� � � � � ���( 1 C�� ���E��E���E��E ���E��E���E��E��� � :D

�� ���� � ���������� ���� �������� ���� �� �$���� � ��� ��� � ����� �� �� '0.1(�

�( Q��� � ��� � �$�� ��� � ���� � ;���� ���� � � ����� � �����

�( <�� ��$�� ����� �� � � � �� ���� �� ��� ���� �

�$���� �� �� �$�� ���� ��

�� ��� �4 ������� ������ �� � � ���� � ��� ����� ��� ��$����� �

�$�� � ���

��$�����

� ��� C�� D / ���� �� ����� &����� �� ����� ������ ���� � 4 � 4 ��� ��� � ����������� � E�( ������ �� � � $)�� �������� �� �� ���������� ������� �� ��� ������� ������� ���� ��� ������ /�� ���� � ��� ������ ��� ����� ������� ���� ��������������� �� ������� �����P #� ���� � ������J� ��������� � ������ ��� ������ ����� $�� � ������� � �� $�� �� ���� ��� � ��� ������ Q �������� ��� �������� ����� ������� ���������� ���� ����� � �� �������� ������ ��� ������ � � ���������

��� ���� � � ��Æ ����� �� �� � �� ���� �� ����������� �� ����� � �������� !�� �� � � � � E ��� � � � � ( � 1 (�'��(�� �� � �1 E ��� � �1 �� ��� !��

�� �� ����� ��� ������ � �� � ��� � ��� '� � 7(' � �( ��� �� �' � �( E 7���� ��$�6 ��� ���� ���� !�� ��� !�� ��$��� � ������� � M�� ����� '%��� ������� ���� � ��� ������ ������ �����(

� � C�� D ����� ��� ��� ���$� � �� ��������� ���� ������� � ��� �������� �� �Q��� 7�'�( ���� �� �� � �O���� � ��� $������ ��� � <���� �� � � � 47 �� �N

� ���� C�� D #��� ��� �� ��� ��� = "@��� �������� � ����� ��� � ���� ��$�� ����� ���� �������� � E ��� ��� ( � ���N @� ��� ��� �� ����N

���� C�� D Q��� � ;���� ���� � ������ � �5 � �$�� ��� ��� ��� �������� � ����K'���� ��� ���� ��� ��� ���� ��� ���( � '0.3(� ���� � ���� � ��� ����� ���� �� '0�/(�

���� C�� D I�$� � �����$�P �� � ������� ������ ����� ���� ������ ���� ��� ������������� � ��� ����� ��� = "@��� ���� �� �������� �� '0�/( ���� ��� � ��� ����� ��� � ���� ������ �� �� ���$�� ���� � ��������� ��� �����$����

� ���� C��� D -����� ������ ���� ���� � �� ������ � �� ���� ����� ���� ����� Q��������� �������� ����� � ���� � ����� ��� ���� ���� ��� ��� ��� ���� � ���������������� �� ��� �� ����� ������� ���������

��� ���� � ������ � �� "� ��� �� �$��� ����� ����� �� ���� � � � � � �0 ��� ������ ������� ��� -�� �� �$��� ���� ����� �� ���� � � �� � �0 ��� � ���� ������� <��

�* 1 � L L , � ��� L �� �����6 �+ 1 L L � � ��� L �� �����

! ������ �� ����� "���� �� �� �0 ��� �*+ �� ��� �� #� ������ �� �������� ��$�

� 1 6 �* 1 6 �*+ 1 �

�� ������� �* �� G������H ���� �� ����� �+ �� G�������HP �* , � , �+�

�( I�$� ���� '�*+(*+ 1 �*+� ����� � � L ������� �* � L * ��� �+ � L +��( ��� ���� �* �� �� �� ��� ���� �� ���� � � 4� 4 ��� ��� � ������

Page 71: The Art of Computer Programming - Bitwise Tricks and Techniques

== ���������� �������� ����� *� �"

,����# ����������0����� ���F��� ����������0-�� ����������-�� ����������������� ��#�&�(������!�������� ������%0��� !��������0�� (���RF� ��(���=�8�������&�(�

���� C��� D 'B� B����� ��� �� I������( �� ����� � ���������������� ��������� ��������� ���� ������$�� �����$���� ����� � � '0�0(N

��� C�� D @����� $ .���� ������ ���� ������� ��� ��� �������� �� ��$�N

��� C��� D <�� > �� ��� ����� ���� $������ ��� ��� ���� ������ � � ��$�� ������ ������ ����& ���� � ��� & ��� � ���� �$� ������ <�� >� �� ��� ���������� ���������� ��� ��������� ������������ '0�0( ��� ���� �������� /�� � ���� � ���� ��������� � ��� ���� ��� � ���� � ������ ������� � >� �� ��� � ���� � �������� > ��� � ��� � ���� � ������� $������ � >�

<�� (����� 1 '�� �(� '��7� �(� '��7� �E7(� '�� �E7(� �� ����� '�� �( ������� ���� ������� ���]� ���� ��������� Q� ��� & � > ��� �'&( 1 &� � >� &� � (&��

�( I�$� ���� �'&( �� ����� �� ��� ��� �� & �� ������� �� >�

�( �� ����& �� >� �� � �'�(� ��� &� � �'&(� ��$� ���� ������ &� �� >��

( Q� ��� &� � >� ��� ��'&�( 1 & � > &� � (&�� �� ��'&�( ������ �������N

�( �� �����&� �� >�� � � ��'��(� ��� & � ��'&�(� ��$� ���� ����� & �� >�

�( @��� �����F� � ������� ���������� ������� ��� �����$��� �������� > ��� ��� ������� � >��

���� C��� D ����� ��� ������� 7� � ��$� �� ����� � ��� �� �� ��� ����� �������

���� C�� D �� � �� �� E�( ���������� �� �� ��� E � '�( E7( ������� " '� '� � 7((� ��� ���� ����������� ������ ������� ��� ��� ��� ������ ������� ������� ������ �� ��� ��� ���� G� ��� �������� ����H '0�)( �� ��

� �� � C�� D +����� �� �������� ���� ���� �� ��� � �� �������� ���� � � ��$��E � ( ������� ������� ��� ����� �� �� �� � ���� �� ��� ���� �� ��� ����� '���'0�)( ��� '0�+(�(

� ���� C��� D +�����J� ��� �������� �� 1 �� E 74 �� ����� �� � � � � ��

���� C���� D ?������ �� � � ���$��� � ������� �� '0�1( ���� ������� ��������� ����� ����� � ���� !������� / ��������

���� C��� D #�� ��� ��� �������������� ����� '!������� /( ������J� ������N

� ���� C��� D Q��� � 0 ������ ��� ��'�� �( � ����� ���� !������� / �� ������� �'��� ��(� '�� �(� ��� ��� �� ��� �� ������ ��� ���� ����� �� �� ��� ��� '�� �(� '��� ��(���� �� � � �� ��� ��$���� �����

� ���� C�� D +����� �� �������� ���� ������� ������J�� � �������� ���� ��� 'B� M( �'B�� M�(� ���� B� M� B�� ��� M� ��� ������� � ������ �� ����������� !������� /�

��� C���� D =�$�� ����� ����� � ����� '��������(� ������ ��� �$� ����� � ��

"'�( 1 '7� �(��� E �'7� �(��� E ����� �� � � � � 7�

�( #��� �� ��� ���������� ����$�� � "'�( ���� � �� ���� � � 7N

�( <�� �'��� ��� ��( 1 "'�( � � � � 7�� I�$� ���� ��� ����� � �'��� ��� ��( ���� � ������ ��� �������� ���� $������ ��� ��� ��� ��� ���

( /� � � �����N �'; E N��� ; E N��� ; E N��( 1 ; E N�'��� ��� ��(�

�( I�$� ���� �'��� ��� ��( �� ���� � � �������� ���� �� ��� ��� �� ��� ��� ��� �� ����������6 �������� �� �� ���� � � ��������

Page 72: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� =*

��'(������ � 0�#0�# (7(�&(���-������������������# �����=� �� ����# �����=;.) !���'+ � �(�� &��!�����(�� !���'+ � �(�� &��!��-������� ����# �����������&������ ��(#��!��(�=

�( I�$� ���� �� � � 6 � 7� �� ��$� ��� �� �����

�'��� ��� ��( 1 �,��� '7�6(�� E 6��� "'6(. � �,"'6(� '7�6(�� E 6��� ��.�

��� C�� D ����� ��� ������� 7*5� ��� �� � ������J� �'��� ��� ��( ���� ��� �������������� ����� '!������� /(� Q� ���� ��� ���� ��� ������J����� � �'��� ��� ��( ����'��� ��� ��( �� �� ��� � ��� ���� ������ � � �� ��$���� �����

� ���� C�� D ;����� ������ �� ���� �� $����� �$�������� ���� ������ ���� ��� �&���� ( '$�� ������� � O �� ���� � ������ � � ���� ��$��� �������� ��� *���� $�� �� ��������� ��� � '����( � �55 '�����(6 ���� ���� ��� ����]����� �$����� �� ������������� $� �$��� ���� ������ � ��� 7���� ���� !� � � ������ ���� ���� ��� �� ����� ��� ��� �������� ����� � ��� '��*( � '�*( �������� ����� ���� �5 ��������� ��� ���� �� ������� �� ������� ��� *� * � ������ � 7���� ������ ��� ��� ������$�� ��55'7� �� :(��, E �

��� ����� O 1 7�4 ��� � �� ��� � ���� � 7� �� ��� � �������

#���� �� ���� � ���� ���� �$���� � ��$�� � � ����� '�=�& ��� ��� ����������� '��*(� '�*( ����� +!&A�& � ��� ���� ���� � �� � � ������ � * ��� ���� �� � � ������ � :�

���� C�� D =�$�� � : � : ������� ����F� � �� ��� '�( � �������� ��� � '�( ������ �� �� 8�� ���� �������� � :���� � �����N

�� � C�� D ! -�$��� -����$� � ������ � ��� ����� �� �� � � ������ � �4 ��� 7����� ��� ������� ���� ��� ������� �� ��� � � � ��� ��������� �� �� Q� ��������

7 7� �7 7

� � 7 7� 7 � �7 7 � 7� 7 � 7

�� 7 � 7 �7 7 � 7 7� 7 � 7 �

7 � �7 7 �7 � 7� 7 7� � 7

� ���

� 7 7 7 �7 � 7 � 77 7 � 7 77 � 7 � 7� 7 7 7 �

��� ������ �������� � ��J�� 4� �� :� :� 4� 5� 5� 4� ��� 5� 5�

�( �� ��� ������ $���� ��� ��� � � � � �� ��� ��� ��� � � ������ �������� ��� ������� � � � � �� �� ��� �� �� ��� ��� ��� �� �� �� �� ���� ������� ���������/� � �� ��� �� � � ������ ������� �� ����� ���� ��� ��$�� ��� $����

�( /� � � �����P /�� � � '�� �( � �� �� ������ �������� �� � ������ ��������

( ! ������ ������� �� ����� -�$(�"� �� �� ������ � ����J�� �� � � ��� Q��������� ����� � ��� ������� ��$� ��� ������� � � ��� 4�� ��� 4�5 ����������� ��� ��� ���� �$��� � � ������ ������� ������ � ������ ������ ��������� � � �������� Q ��������� ��� � � � �������� ��$� ��� ���� ��J�� �� � ������� �� E 7 �� � ��$��� � � E 7 ��� � E 7 �� � ��$��� E 7�

�( /����F� � ������ ������ ������� ���� &��� �� �� ��77� � � ����� �� � � �������� ��������� ���� �7�7�� �� ����� � ������ ��� � ����� ������� � ��$�������� $��� �� ��� �� �� � � ������ ������ �������N

�( I�$� ���� �����F� � ��0 � ������ ������ ������� ���� ������ ���� 7

���� �� �� � � � ��

� �� C��� D ! �$�-�$ )�� -�$��� -����$� �� ����� � � ��� ������ �������� � �������� 7*8� ����� ���� ��� ������� ��� �������� �������� � ��� �� ��� ��� ���������

�( Q��� � ������ ������� ������� ��� ������ ������� � ����� ���� ������ ���� ���� ��� ������ �� ������ ������� � ����� � E � ���� ������ ���� ������

�( /�� Q����� ��������� J�'�( ��� ��&��� �� ��� �� �����

J�'�( 1 �� J�'�( 1 7� ��� J���'�( 1 �J�'�( E J���'�( �� � � 7�

Page 73: The Art of Computer Programming - Bitwise Tricks and Techniques

=< ���������� �������� ����� *� �"

��(#��!��( !���� !�� : ����(�;.) !���'�������0�(��F�������(( ��������!����!�(��&#� ������0=('���0����� ��

��� ���� �����F� � ������ ������� ������� ��� ������ �� ������ �������� ��������� ���� 7� � � � � '(�7 J���( ��� ��� Q����� ��������� �� � �E 7������ ������� J�'�

�� E7E �(� ��� � ��������� �� � �� ���� �� �� �E7�

( �� � �� ��� ������ ������ �� � � � ��� ��� ��'�( 1 ��� E � � �E ����� ��� ����

�������

��'�( 1 '��'�( E ��'�

��((J�'���E7E�( �� '�E 7( ��� �� ��

���� ( 1 �E� ��� �� �� �� � � � ������ ������ ������� ���� ������ ���� ��

�( ����0 ����� �� �� �� �� �� ��� � �� ��� 5'� �� �( ������ ������ ��� �������� :� �4"� 6 ��� �� ��� �������� J���'�( 1 J�'�(J���'�(EJ���'�(J�'�(����� ��������J�� ?0� 7���*"'�(�

� �� C��� D /�� ������� ������ ������� ���� ������ ���� � ��$�� ������ �� �� 0 ������6 �� �������� �� � ��� � ���� ��� ������ ������� � ����� 7�� ���� &��� �� ��7� � � � � ��� ������ 4 ���*��8���7*�8 4�8 'R(� /�� � ���� � ���� ������� �� � �������� � �� ���� ��� ����������� � ����

�'A( 1 7E��� � ����� ������ � ������ ������ ������� � ������ � ��� ����� A�7��

���� ������� $�� �� '7� 4� :� � 5� �:� 8� 7�� �*( �� 7 � A � 8 ��� ���� � �� �� �� �����

�( ���������J� �'A( ������������� ���� ��� Q����� ��������� � ������� 78���( ?������ �� � �� ���� �'A( �� �� ��� � � ���� E � � ���� �'A( ��$���� E �

��� �� �� ��� ��� ��� ����� ����� � E �( I�$� ���� �'��( 1 4 � ���� ���� 2 �� ����� J��'�( ��� � ������ ���� �� ���( I�$� ���� ���� A �� �� ��� �� � � ������ � 4� �'A( �� � ��$��� � ��� � 7�

����� 2 �� ��� ���� � � �� � A� ����� J����'�( ��� � ������ ���� �� ���( #��� ������� ���� A �� �� �� � ������ � 4N�( Q������� ������� �� � ������ ��� ��� ���� A �� �$���

� � �� C��� D �� � ������ � � ������ ������� ����������� � ��� ��� ��� ��� ���� �����F� ��� � ������'��E7(�'�E7( ������ �������� '�������� ������� ��������� ���� ����$���� �� ������� ����������6 �� ����������� 5� 5 ������� �� ������� 7*8 ����� � Q��� ���(

���� ��� ! ������4*4�4*4 ������ ��������

� �� C�� D Q��� ��� � 4*4 �� ���� ����� ������ ������� � ������ ������� ���� *���� ��������� � ��� ��� ������� �� Q��� ��� ����� /�� ������� ��������� ��� � � �������� � �� �� J���

� � �� C���� D <�� ! �� � ������ ������ ��$��� ������ � � � � �� � ������ � ?������ �� � �� ������� �������� � �� �� ������� � � = � ! $�� ��� ������ &��� �� 7�� ��� � &�� �������� ����������� ������$���� 6�� � � � � 6� � ������ � � � ���� 6�! 1 � � � � � �� 7 � � � =� ����� ��� ���G������ ����J����H �������� �� � �� ������ !������� :� ��%�

� � C�� D 'A� /������ 788��( �������� �� ��� ����� � � � � �� �� �� ����� ��� ������ � � � ��� ����� �'�( 1 �� � � � �� �� ��� ������� ���P �� � � ��� ��� � 7 ����� � �� ,�������� ��� � 1 '� � � � ����(��6 ��� � '-�(�5�� �� � �������E����� ����� 1 ��E���� �� � � � � � %��� ���� �'�( ������ � J�� ���� �� ��� ��� �� � 1 ��

�( #��� ��� ��� ������� � ��� ����� �B�4B� ��� �$)$>$N�( �� � � ��� ��$� ���� �'�( � �'��( �� ���������� �����( � ���� � ��0 ��� � $�� �� ��������� � � ���� ��� ���� ����� �� � ���� ������

�'����(�'����( � � � �'����(� ��� ��� �� �� ��� ��� ���� �� ���� ������� ��� ����

Page 74: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ���� �� � ��� �������� =?

���7��( ������ ��������������%)*< )*%&�� ��� ���� �!����� ��!�����%D�����������0 �������( ���������&( (����� &# ��� ���0-#�< � )*%&�� 8������#&#�< �� D%&�� 8������#�#&&(< � ?%&�� 8������#�#�< � :%&�� 8������#���&#� � ���< � >:%&�� 8������#����&#� � ����< � *?%&�� 8������#�����#&����(��,��=,1��=�'����!�( ��0���!����������'����!�( ��0��� �� ���M������M�����M����������(�� !���'��Æ' ����#

��F� ���� � ��������� ��� $�� � ���� ��� ���� �� ���� �� ����� �� � ��� ���� ���������� ����� �� ���������

� � C�� D /�� Y��$����� �������� ��� 'Y��(� ��� ���� �� Y����� �� � ��������������� � �������� � ������� ������� � �� ��� ����� � � � � ��� E ���� !������� ����� Y/Q�7 ���������� � � �������� �� �� � �� ����� H'�( 1 H� �H'�( 1 H�H�� �� ��� ������� ���P �� � � ��� ���� H'�( 1 �6 ��������

H� 1 ��@## E ������� ��� H� 1���## E '� �� ���(� ����� � 1 � � ����

!����� 0 ������ '�(� '�(� ��� '( � ������� 785 �� ���� �������

� � �� C�� D Y���� �������� ��� ���� ����������� �� ������� � ����� ���� � ���������� Y/Q�*� ���� �� ��� ������ � ������� 785 ��������� � �������� �� ��� ������ � � � ���E���� %��� ���� Y/Q�* ������� ������$�� ��� �������� !���� ���������� '��� ������� ���� � � ��(� ��� ���� �� �� 0 ��� ��M����� ��� Y/Q�7 �

<�� �� �� ��� &��� ���� � � Y/Q�* ������ �'�(� ��� ���� ����� ��� �������������� ������� ������� �� �� ��� � � � ���� ��� � � ������� ��������

,� � ''�� � �( 3 �(.3 4

� � � ��������� ��� � ���� � 7 � ����� ������� �� ��� ��� ��� � �'�(�

� � �� C�� D ! ����� ����� ��� � ���� �� �� ��#@� � ��#@#@� � � #@#@#@� ��Y/Q�*� ��� �� ��� �$� � ������ �������� ��� �� ��� ���� ��� �� �� ��� ����; � � � ����������� ��� ���� ��� �������� ��� �� ���� �� ���� � �� ���� �����

� ���� �� ��� �� ��� ����� � � ���� �� � �@# ��� �@# � �� � ��#� Q���� ��������� ��� � ����� ������� �� ��� �� ��� ��� &��� �� ����� � �� ����� ������������ Y/Q�* ������ �'�(�

� � C�� D ��������� ��� ������ � �������� 94 ����� ��� ������� ����� ���� ����� ����� ��$� ���� ��� ���P �/! C$DC#DE4>F ��/! C%DC#DE4>F <G'G C�DC%DC$�

���� C�� D � ���� � 1 '�� � � � ����(�� ��� ������� ���������� ������� #��� �� ��������� ��� ���� ����� ��� ��J�� ����� � � ����� ���$��� J��� �� ���N

���� C�� D #��� �� ����� ���� ���� ����� �� ������F� ��J�� ����� � � N

���� C�� D � ���� �� ���� � �$��� � ��������� � 1 '�� � � � ����(�� � ��� ������� 1 '�� � � � ����(��� ����� �� �� ��� !���� �� �� ��� ���������� ����� �� � Q��������� �� � 1 �$%�>����� � �� �� ��������� ��� *�������� ������ H$%�>����H�#��� ��$�� ���� � &$� ������� �� �� �� �� ��� � ���� ���� ��� ������� ����

����� ���� � ��� O�N

�/! �D�D�F <9G �D�D>F �/! �D�D�F &:) �D�D�F

&)) �D�D�F �/! �D�D�F &)) �D�D�F &)) �D�D��

� ���� C�� D #��� ��� ��� ���J��� ������� �� A� =� � ���� ����$� � ������ �� X����� O �� ��� ���� ������N '��� '0*.("'0*1(�(

���� C�� D /�� ������ �� X� '0*.( �� �������� ����� �� G ��� X��H �� ����������� ��� G���� X�H ���� ����� � �� � " � 1 '���� � � � ��������(�6 ��� ��� X�������$�� ��� ������� ��� �������� ���� � �� � � ��� ���� X� ��� � &��� ��������� �� ���� X� �� �������� �� ������� �� �� ��� X�N

� ��� C�� D #���F� � ���� ��� �� ���� � �������� �� *� * ;���� ������N

� ��� C�� D �� ��� � � ������ ������� �� � ������� 4 ���� � �� �� ���� ��/!N

Page 75: The Art of Computer Programming - Bitwise Tricks and Techniques

*5 ���������� �������� ����� *� �"

���� ��&(!������ ���(�� ���������(#��!��( !�(���(�������,1���������&����(����7�!���' � � �� ��� )�

���� C�� D ! � JJ��P -������� � ������ � � ���� *�E�� ����� � � �� � � *� -��������� ��� � ����� ��������� ������� '�� � � � ����(�� ��� '�� � � � ����(��� Q��� � ��0 ���� � � ���� ����� ���� ���� ���� � � �� 3 �� ��� �������� ��

� ���� C��� D /�� �� �� ����� � � ;���� � ���� �'��� � � � � ��( �� ����������� � :����� ����

� 1 ,�'�� �� �� �� �� �( � � � �'7� 7� 7� 7� 7� �(�'7� 7� 7� 7� 7� 7(.��

��� ���� �� �/! ����� ���� ���� �$��� � � ��� �� �� ����� � U� � ��� ����� �����;���� � ���� ���� �� ������� ���� � �0 �� � � �� ��� �����

�� � C��� D � ���� � 1 '�� � � � ����(� ���������� ��� ��������

�'�( 1 '�� � � � ����( 1 ���� E � � �E ��� E ���

+�� �� ���� ��/! � �� �� ��� ��� � �'�( 1 �'�(�'�(� �� � ��� ��� �� ��

� ���� C���� D ��������� ��� ��� ���� �� '01+( � �����

� ���� C��� D '-� #� =�����( Q��� � ����� ��������� ���� �� ����� ���� ������ �� ��� ��$���� � ��� ��$�� *�* ������ � � �� ��� 7�� �� � �� ��� ���� �������� �� ���

Page 76: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ *

�������0�-��E������0�� :%���� ���0�!�0�����,�,�0�-�(�-�9� ��!�(!��&���# &�������0�����#��������!!�����7 (�-�

%�#$�� �� ��

�� /���� �������� ���������� ��� ���� � � ��� � �� ������� ����� � �� 7� '������� ���� �� � 1 �7� ��� ���� K� � � � '� 3 �(F ����� O �� K� � � � �F� ��� �������� ����������� ���� ���� � � � ���� � ������� �� � ������� ��������� @� �� #������L��� ��� ����� ���� ���� �� $�������78 7 �;B ���������� ��� �����(

�� !�� ����� ��� ���� � ��� � ��� ��������$�� � �� �� ������ � ��� � �� G ������������ ��������H �� ���� � � 7 � � � � � � � �4 � �� � �7� ; � �� ������$� ����������� ���� ���� ��������$� ��������� '�( ����� �� ��� ��� �� � � � ��� � � �6 '��( ��� '���(���� �� ��� ��� �� � � � � �� ������� �� ��� ��� �� � � � ��� � � � � � � � ��� � � ��

�� %�� ���� � � � 1 '� � �(� �'2�3 �( '��� ������� 84(� ;� ���$��� ���� ���� � ��� � �� ��� ����� �� ��� ��� �� ���� ���� 1 7 ��� ���� 1 �� /��� �'2� 3 �( ��''� � �(� ����( 1 '� � �(� '� � �(� � 7�

�� �� 1 � E 7 1 � � �� '0�(� @��� �� 1 ��� 1 ���� 1 �� 1 �� �

� '�( +�����P <�� � 1 ' � � � ������(�� /��� ����� � � � � �� ����C � � D� � ����� � ��� ��������� ���� �� ������ C � � DC � � � � D� ����� ����� � ��� ���������� ���� ��������C � � E � D� /���� ���������� ����� �� � � � � � � �� ; � �� � � � � �� ������M�� ���� 1 ���'�� � E �( ��� ������ 1 7�

'#� �� ���$��� ��$� '� � �(� � � � � '� E �( �� ��� �����('�( I��P +���� �� ��� ����� ��� ��� �� ���� C ��� D � ����C � � D�

� ���� � � � � � �� ��� ��� �� � � �� �� � �� ��$� � � � �� ��� ��� �� � � ��,�$� ��� � 1 � �� ������ � �� ���� /�� �� ���� ���� � � ��� '�( � 1 �7 ���� 1 ��� � �" � � �6 '�( � 1 � ��� � 1 7� � �� � �� �� ��

�� ��� �� � '�E 2,�(� 2,�� ����� ,� �� ��� ������ �� '�*(� /��� �� 1 ' � � � �������

��(��

���� '���2,�(�2,� 1 ' � � � 2�����2�

���

��(��' � � � 7�7�(� 1 ' � � � ��������(��' � � � �������(� 1 ��

C/��� �� @�� 7�* �� �� ���6 ��� ������ �� ����� !� ���������$� ��� ����� � ',���(�,�� ��� ��� ���� � ������� �� +� I� !������� ���� �������� '78*�(�7�4�"7�45� /�� ��� ��� ��� ���� �� � �� �� ��� � � � $��V� � ����V� �� �� Q� �������� ��F� �������� ������ � ����� �� �� ���� �������� ����� �������� � ���� � 7� ��� ��$�� � � ���������� � ����� ����� ��� � �

'�� � 7( �

�'�� � 7( ���� �� �$��� �� ������� ��� ��� �� �� � '� E ,( � , �$���� ���

������ ������ � ��� ������� � ���� ������ ���� ������ ����� *��'�7(��+ ��� ������ ������� :�7"4�'(� ���� , 1 ' � � � ������(��D

�� Q����� ��� �� '���(�'��� (� ����� � ���� ���� � � � � ���� ��� ��� ��� 1'�7��(�� � 1 '�����(�� ����� �� ��� ��� ��� ��� ������� � �� ��� 7� ���� �� 1 ����!�� �� �� �������� ���� � 1 'H7H�(� ��� � 1 'O�O�(�� ����� � 1 H 1 O� /������ 1 'H�O��(� �� ���� ���� �� @��� ��� � �� ��� � 1 '���(�� � ���� C��� -� I������ �� ��� ! "���� #� �� '784 (� :4*":::6 I� B� =� ���� �!� � � '7848(� "*�D

� /�� ����� �"=� ��� ������ �� ��� ���$� � ������� ���� ���� �� ����� � ���� � ����� ��� �0 �$����� �� ���� � � ������ ���� � ��� ������ '/���� �� � ��������$�������� � � �� � �� ��� ��� �� ����� ������ �� � ��������$� � � � ���� �� � � �� � �� ��������$� � � � ���� � � � � � � ��( � ��� � ����� ��� �0 �$����� � � ������ ����� ��J� �� � � � � � ��� C��� �� <� ; ��� $����� � "���� '�( � '78�7"78��(� 45"48�D

��� Q� ������ ��� ���$��� �� ����� ����� ������ �� �� � � � ��� � E � �� � � �� ��-�$�� 5�6 �&$ )'& 5� 6 ( �&�� �����$ ����

'�( ������� �� 1 � ��� �E � 1 �E� ��� �� 1 ��� !�� 7� 1 �� �� ��� ��� � ��'��( �� � �1 �� ��� � �1 �� ���� �� E ��� E ��� E ���� �1 �� ��� �� ��� ��&����� �

�� ���� ���� ��� E ��� E ���� � �� ���� �� � � ��� �� � �� �� ����� ���� �� � �1 � ���

Page 77: The Art of Computer Programming - Bitwise Tricks and Techniques

*! ������� � �8������ *� �"

����((����� (�-�����&���7 (�-����((����� (�-�����&���7 (�-����7(#

� �1 � ���� �� �1 �� !����� ���0 ��� �� ����� �� � 1 ���'�( ��� � 1 ���'� ( ����������� &���� ���� � ��� � � �� ��$� �� 1 ��� �� E �� E �� � � �� � � ���

'���( ����0 ������ �� ��� ��� � ��� '�������( � � � �� �� ��� �� '� E �(� ��

����'� E �(�� E '�� E �(� E '�� E �(��� '� E �(�� E '� E ��(� E '� E ��(��

� � � �� � �� � � �� � �� � � �� � ������� �� ��� ��� E ��� E ���� E ��� �� E ��� E ��� E ����� 1 �� E ��� �� ����� ���������F� � ��������� ���P �� �� 1 �� ���� '� E �(� 1 �� � � 1 � � � 1 ��

'�$( ;� � ������� ��� ���� '��(� 1 ��� '��(�� E '��� E ��� E ����('� E ��(� 1��� '��(�� E '���(� E '���(�� E � � � � 1 ��� �'���( E �'���( E �'����( E � � � � 1��� '� E ��('��� E ��� E ����( E ��'��(� 1 �'��(�

'$( �� � � �� � � ����� ����� ��$� ���� � � � � ��

�� ��

� � � 1 ����� ���

��� � ��

�1

���

�� ;� ��� ������� ��$� ��� '���( �� � �� � ������ ��� ��� � 1 ��

��� � 1 �� �� � � �� � � ��� <�� � 1 �� E �� ��� � 1 �� E ��� ����� � � �� � �� ���� � �� � ��6 ���� � 1 ��

� � ���

��� � 1 ��� � ��

� �� ��� ��� � ��� � � �7 ��� A � �7 ��F$� ������� ��$�� ���� ��� � ��

���� �� � � A 1 �7�

���� � � ���

� ���� ���� � � � � ��

�� !�� �� � 1 A 1 � 7� �� ��$� � � � 1

��� � ��

� � ��� � ��

1 ' ���

�(� �� ����� � � ��

�� /� � � � � � ��

��� ��� �����

;� ��� ��������� ���� ��� ��������$� �������� ���� ���� ������ � � �&����

@��� �� ��� ��� ��

��� � � 1 ��� ����� � ��'� � ��( � � �� � ��

�� � � �� � ��

�� �� ��� �� �� ��� �� � ��� �� ��� � ����� ������� ����� ��� ��

�'�� E7(� 76

� � ���� �� ��$�� ��� ����

Q������ �� ��� � ��

�1 ��� ���'�� � ��( � '�� � ��( � � ��� �� � ��

��� ������� 1 �� ���� ��� �� ��� � ����� � � ��� ��� ���� ��

� � 7� ���� � � � 1 � � �������� ���� '�� �(� '�� �( 1 �� ���� � 1 �� ������ �� 1 ���7 ��� ��� � �������� ��

��

���

��7� ���� '���(�� 1 '���(�� ������� ���� � 1 � � � 1 ��7� ������� ��� ��� �����&��� ��� � � � � �� ��� ���� �� ���� � �� /��� ���� ����$�������� ����

���� �� � � ��� ���� ����

�������� �� �������� ��� � �&��� �� 7� � � � � 75�� ;� ��� ������� ��$� ��� �� ����� � ��� � � � � � ��7� ���� ��:� ���]� ��*� #� ��$� ��� 1 4� ��: 1 *�:� : 1 6 ��� � ���������� �� * �� �� ��� �� � ��������� &��� �� � ��� ���� �� :� $�� $����� ��� �� * 1 �� :� /� � �� * 1 7�� :� * 1 77� *� * 1 74�

�� �������� �� �� ��� 1 �� E = ����� � � = � ��� /���� �� � ���� � ����

������ �� � � ���� � ���������� �� �� �� �0 �$����� � �������� �� � ���� ����� ���� ��� ������ �� �� Q� �������� �� 1

�� �� �

�� ��� ' � � � ���������(� � �� 1

' � � � ���������(�� ����� �� 1 ��� �� 1 �� � ��� �� 1 �� � 1 � � ��� �� 1 �� ���

/�� ������� ��� ����� �� ���$��� �� �����P <�� �� 1 � 1 '7( ���

����� 1

P �

P �

��� �� � �

� ��

�� ��� 1

� �

� �

1 ��������

����� �� �� ��������� �� �� ����� � ���� ���� ��� ��� � ���� Q� ��������

�� 1

���

7 � 7 7� 7 7 �7 � � �� 7 � �

���� 6 � 1 ��

�� �� ��

1

���

7 7 � 77 � 7 77 7 � �7 � � �

���� 1 ��

Page 78: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ *"

����,1�����-�#�����( ��!&��������! !�(���(��������(��!����-�#��#����#��# &���# ���

�� �������� � ���� ��� :���� � ����� ��� �� 7 � � � �� ��� ���� ����� ��� ��/! �DI�D�

���� �� �� � 1 �� �� � ��$�� ��� ���������� ������ �������

I� 1 �#@#�#%##�#@#�#%�I� 1 �#J#@#>##�#J#@#>�I 1 �#�#�#@##�#�#�#@�

I� 1 @�>�%�$@@#>#%#$#�I 1 �J@��>%��#@#�#%#�

I� 1 �4JB@�>��#J#@#>#�I� 1 ���4�J@��#�#�#@#�

CQ� � ����� ���������� ��� L� @� ������ %� &!�'�� ��� ����� '78� (� ������� ������ �� �� ���� ���� ����� ��&������ �� ���� ����� �� ������������ ���� &��� $����� ������ � ������D

��� <�� � 1 ��� E � � � E ��� ���� � � � � �� � � ��� 1 ��� E � � � E ��� �����$ � � � �� � �� /��� � � 1 � �� ��� ��� �� '� � � � ��( 3 '�$ � � � ��( 1 ��

��� �� � 1 ���

� E � ����� � � �� � � ���

� ��� �� 1 � � '� � �(� /���

�� 1 ''���� �(� �(� ''��

�� �(� � � �( 1 '����� � � � �(� '� � '� � �(( � ��

/ ������$��� �� � �� �� �������� ������$��� �� �� ��� � ������ �� ���� C/��� ��������� �� � � � @� #� <������� L��6 ��� �(������� �� ��(��� ��� &�'�� 'Y��$�����S��� ;���� �� 78��"78�*(� ����S� 77� ������� 5�D

��� �� ���� � ���� 1 ������ � ��''���(���( 1 �� �$��� �$� ������ ���� ������6�� ��F� ��$� '� � �(� '� � �( 1 '� � ��(� '� � ��( ���� � �1 � ����� '�� �( 1 '��� ��(�

��$������� �� �� � � � � � �� �1 � �� �� ��� � ��� �� ���� � � � � ���� ����� � J��6 ���� �� �� �� ��� � � � � � � � ''� � �( � ��(� �� �� � � � � � �� 1 � ����� �1 ��� � �� ''���(���(� �� ������ ��� � �� �� �� �� � ������ ,�������� �����F� �� � 4 � � ���� �0 ����� ���� � �� '� � �(� �� �� ������� �� �� ���������� �������$�� � ''� � �(� ���(� ''�� �(� '�� � ���((� �� ��� � � � � � ��� � � ��� � �� � ��� ��� ��� ��&����� � ��� � ����������6 ���� ��� � ��� ������� �0 ������� ��� ����$���� ������� �� � ��� ��� �� � ����� ���� � C/��� ���� ��� ����� �� �� )�����* )�+�

�� ;��������� ������ ��� = �� �� ��� ��� � ������� 7:�D

��� '�( ?�� � 1 ' � � � ������(� 1 �� ���������� � 1 ' � � � ������(� ��0 ���� ������ 1 �� � � ��� ����� 1 �������� �

'�( #��� � �� �� �� � �������� � ���� ���� ������ ���- 1 � �� H 1 � � 7���� �� 1 � �� � � �� ; � ���� � � �� ��� ������� �� �� � ���� �����6 �� ���� ������� ��&������ ���� ����� �������� ��� ��

C/�� ��� � 1 7 �� ����� ����� �����������P /��� �� ����� ��������$� ����������� ��������$� �������� � �$�� ������� ������$� �������� ��� ��������$� �������� ��� ������� ��� �7�4 �� �7� Q �������� ������ �� G=��� ������ ���H ����7�7"'3(�D

'( �� �'� � �( 1 � �� ��$� � '�( - � '�( ��� � - � E �� '�� � ����(� @����'�� � �� ( 1 �'�� � � � '�(�� '�(( 1 �� ��$������� �� �'�� � �� ( 1 � �����$�� � 1�E��� �� ����� � � ������ ��� �������� �� ������� ��1'����( �� � ���� �1'��(��

'�( /��� ��������� ����� ����������� ��� '�( ��� '(� Q� �� �� ������ ��$��'� � �( 1 �'�'� �'( 1 �'�.� �. (� ���� �'� � �( 1 �'�'� �'( 1 �'�'.� �'. (� !���� ��' 1 � �� ��� �� �'�'� �'( 1 �'� � �( �� �0 �$����� � �'� � �( 1 �'��� ��(�

#� �� ��� ���� � ��� ��������� ���������P �� Q 1 DF � ��� ���� ���� �� �� � � �� 7� �� ��$� Q� 1 D�F�� � Q�� 1 D��F���� � ��� Q��/ 1 D��/F����/� � ����� �� 1 ������ 1 �� ��� �� 1 �� ���� ��� � �6 ���� ; 1 �� &� ;� 1 �� � &�� � ;�� 1 ��� � &���� ���� /�� �������� � ��$���� � D �� ������� �� �������� ���� ��� ����� � ������ � ������� ������� 76 �� � � 1 �� �� 1 ��� � ��� 1 ����� � ���

'�( /�� ������� ���� ���� �� '�( ���������� ���� ��� ������ ������ ��������$�� �� �������� ��� ��$������ ��� �� ��� 7�� 1 �� 7� �� ��� ��$���

Page 79: The Art of Computer Programming - Bitwise Tricks and Techniques

*- ������� � �8������ *� �"

��������!����������:%���� ���0� �� � !��� �����#(�- �%��&0����#!!��� 0�����!�(� &���# ���6��� '�(���7 ����-�#E(��(�����8�����6������������%�� !������ (�0�� -��� �� ��������)�

� ���� @������ <������ ����$�� ���� �������� � ����� �� ��&����� �� $������� ��� �� ���$��� '��������������$��� ���� ������( � ��� ����� ��������� ���� �� �� ��� ��� �� 7���� �"� � ��&�� ��� G�������H ������� ����� �������� � ��� ��B��$��� ��� �������� � ����� �� �� � �� � � �� ��� ���� ��� ��� � � ����� � � ��� ���� ������ � �� 7� � � � � ������ ������ ��� ��0 � ' � � ���������(� ��� � ���� ��� ����� � �$�� ���� ���� ��� � ��� �� � ���� �� �� /��� ������ �0 �$����� � ��� � ��������� � ��� ������ ������ ���� ���� �� ���$���

�� ?0 �$�������� '�E��(�� 1 '���(E��6 � �� ����� �� ���� &�� ��� � ��� � � � ����'�� �(E � 1 '�E �(� �� ;� '13(� ��� ������ �� �0 �$����� � '�� �� �(E�''�� �(3 �( 1'� � � � �( E �'� 3 �(� � ��� ������ � 3 � 1 � �� �������� ��� � ����� /� � ��������� '� � 7( 3 � 1 � �� �������� ��� � ���� �� ��� ������� �������

�� '�( �� �'� � �( 1 � �� ��$� � - � E �� '�� � ����(6 ���� � E � - � E � E ��

��� �''� E �(� '� E �(( 1 �� !�� �''� � �(� '� � �(( �� �$� ��� ��'�( /�� ������ ��������� ��� �� � '�(� ��� 7� � ��� ���� ���������� � �� ���

�� ���������6 �� � �� �� �������� /�� ������� ��������� � ���� �� �� �������

�� �/������ �/��

��� 000� �/������� � ��� ����� �� 1 �� � � � � � �� 6

� �� �� ������� �� ��� ��� �� �� 1 ��

C������������ ��� ��� � 1 � '�(�� � '�(�� '�E��( � � � ��� �� �� ��$������ ����������� %���� �� ��� ������� ������� ���������P ! �������� �� ������� �� ������ �� �� ��

� A A � �� �� ��� � � �� /��� ��� ��$� � �� ���� ��&��� �$���� �� � ����� �� ��&����� ��� �� ��� &������ ���� 7� ������ �� ��� ����D

'( /�� � ���� � '�( �� '�( ��� ���� ���� ��� �� �� �/� 1 � � �� � ��� �����$����� ��/� 1 ''� � �( E 7( � �� �� � � �� � 2�� 1 �� ��/�� Q �������� �� ��$��� �/�� ��� 1 �� �/����� �/��%�1�����������%�/��� ��� �� �����1������ � �� ����������� � ���� �� � ��������� �� �/�� ���� ��� 1 �����������%�/������2����/������ !���� ��������� �0 �� ����� �� ����� ��� ������� ���� /�� ��� ����� � ������� ��� ��0 � ��� �� ���� ��� ��� ��� $�� �� � � �� ���� ��� � ���� ������ �����

'�( #� ��$�� �� �������� � � �� � �� � �� � �� � �� � �� 1 �� ����� ����� �/�� ������� 1 �� �� 1 �� ����� ��� �� 1 �� ����� �����

C/�� ����� � ��������� � ����� ��� ��$����� �� L� @� ����� �� ������� 74� ��� �� %� &!�'�� ��� ����� '78� (� �������� �� ���$� � ��� � �� I� #������� ����*������ "���� �� '785�(� 4�:"47:6 � '785:(� 78:"����D

��� '�� ��� �� B� ��������( � � �0 ����� ��� �������� �$�� �� �� ��� ���� ��������� � � �� �3�� 2�� ��7� ��7� �� � ��� �! � ��� �$�� �� �� ���� ;���� ���������� � ���������� ��� 0 ����&����� $�� ������� $��������� �� ����������� ���� ������ ��� � ��������� ����� ��� ���� �� � ���� '�7�(� ?�� ����� $�������� 1 ' � � � ������(� �������� � �� �7� ��� $������� �� ����� � � � ����� �� 1 7P

� 1 2� ����� .�'� � R ) � �� �(6

� 1 � 3 � ����� .�'� � R ) '� � � � � � L ((6

� 1 �� ����� .�'� � R ) '� � � � .4'4 � � ( 4 �� �(((6

� 1 � E � ����� /# .�,� ��# � '� � R ) '���(� '��L (� '��#((

� '�E7 � # ) *'���('��L ('��#(+(.�!� �������� � � �� � 3 '��( 1 �� �� �0 �$����� � ��� ���������� �

.�.L .R''�������'�( � � 1 � E � � � 1 � 3 �( ( � 1 �� (�

Page 80: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ *;

!�0���H������!&�0����(7�&(E(��#�&�(�� ����7��������������0���#����(-��� R�(#� �(#���,�,��!&��������=�� �

����� �������'�( ������ �� /�.4,4 � ( '4 � � ) � � �(.� #� �� ��� �� ������������ ������� �� ����6 �� �������� � 1 ,� �� �0 �$����� � � � R � .�'� � R )� E 7 �� R(� ; � � ��� �� ���� ��� �� ��������� ' ��� �����( ��������

L� -� ; �� ��$�� ���� ��� ��� ��� � �7� ��� ��������� �� ,*�-. "�����*+.

��� /���� �+ � �-���-�0 /-�����*� '�������� 78 �(� 7"77� �� �� ������� ��������� �0 ������ �� �� ��� �� ��� ���� ���������� ���� � ���

,� ��� ���� ���� B� @��� �� ��� ���� ���� ��� ������ � �� �� ���$������ ��� -�� � 7�� ���� ����� � ��� ���������6 � ���������� �� ���� �� ������

������������ ���� �����$��� ���������� ������ �$�� �� �� �� ��� ��� ��������� � � ��� � E 7� Q� �������� �� I� #����� ����� �� 785� ����

''� � '� E 7(( E 7(� '� E 7( 1 ''''� E 7(� �( E 7(� �( E 7�

��� ,� ��� �� � �� �������� ����� ���� � �� � � ������ � :� /�� &�� �������� ���� ����� ��� ���������� G����H ��� ������ � � ����� �� � ������ ���� ��� � ��������� ���� ������� ���� ��� ����� ����� ��� �������� ����� � 1 :

�� ��������

��� ��������� �� 1 ����� �� �������� �� � � 7 ���� ����F� � ������������� ���� � ��� � ��� ��������� ��� $�� � � ��� � 77 �� �� �� ��� ��� ��

������� �� 7 � ��� /� �� �� � 1 :

�� E Æ ��� �� 1 ���'� E S( �� ��$�

���

����� 7 1

�7�*

��ÆEÆ�

:�8

�� �� 7 1

�����

:�8

�� �� 7 1

�'�E S(� ��

:�8

��� 7�

��� ���� 0 ������ ��� � ���� ������� � �� ����� ���� Æ �� ��� � � ����� ��������

C��� �� !� I��$�� ��� !� <��������� #� ��-������� "���� �� '78*8(� 7 "7 8�D

� � '�( #��� 1 7� �'!� "� #( ��� ��� ���� $�� � ���� ��� ������������ ��������� �� �1 ��� �� �1 ��� ��� �� �1 ��6 ��� ���� �� ���� ����� 7� Q� ������ $�� �� � �� ��� � �� ��� ���� ��� ���� ���� 1 4 �� ���� � �$�� ������� ������� <��!� 1 '��� ��� ��� �(� !� 1 '��� �� ��� ��(� � � � � #� 1 '��� �� ��� ��(� /��� �'!� "� #( 1�

������� �'!� � "�� #�( ��

������� �'!�� � "

�� � #�

� ( �� ��� ���� /� � �� �� ��� ������ �� � �� � �� � �� �� � � � �� � ��� � � � � �� � � � �� � ��� #� �� ������ ��� � �$���� !�

� 1 '��� ��� ��� �(� !�� 1 '��� �� ��� ��(� � � � � # �

� 1 '��� �� ��� ��(�� � ������� ���� Q������� �� �� ��� !��

� 1 '��� ��� ��� ��(� !��� 1 '��� �� ��� �(� � � � �

# ��� 1 '��� �� ��� �(� ��� �� �� ��� ���� ������ ��� � ���� � � ������� �� �� � ����

������� ���� �7� 7�� ��� 77 � �� ������� 4�� - 4�� - 4�� '�� � �(� !�� ����� ����������� �������� ���$� !� "� # � ��� ������ �� ������� 5�4�:":*�

'�( � ���� ! 1 !�� " 1 "�� ��� # 1 #�� /��� �� ��$� �� 1�����

$�� �$C� � �D������ �� 1 �� � ���� � � ��� �� ��� ��� 1 �6 ������� ��� ��� ��� �� �� ��� ��� <��!��� ����� ��� $��� '������ � � � � ��������( ���� � �� � ���� ����� � �� 7� � � � � ���7��/��� �� ���� '�( �� ��$�

�'!���� "���� #���( 1�

�������

�$���& �$H�O& C�'�(� �DCA'�(��DC=' (� & D

���������

�$���& �$H�O& C� � �DC� ��DC � & D 1 �'!� "� #(�

C/��� ��� �� � � � @����� <�������� ��� IS���� ���1!������� '784:(� 07��4�D'( /�� ���� ��� �����0 � ������� � ��� � ���� � $����� C-� ?� !� ��

I����� /-� ,��� "���� �-� '�( �� '784�(� � 4"��8� /����� 75�D

��� /�� ��$�� ����� �� �� ��� ����� ������� � ������� ���� � � � ���� '� 1 '��/���F�� ��� � �� ���������� ��� ��������� � �O���� ����� � �� � ���� '���� ������ ��������� � ����� � �� �������� ���� ���� �������� ����������� �� 7 ����(�

C/��� ������ �� @�� 7�5 �� �� ���� B����� ����� ������ �� � /������!���&��� ����������� <������� B�� %� �48 '�8 Q��� ��� 78��(�D

Page 81: The Art of Computer Programming - Bitwise Tricks and Techniques

*= ������� � �8������ *� �"

!��!�0�� !�����//����E���(���(%�����

��� ��� � � � E 7� � � � � �� & � � 3 �� � � & � '& 3 �&(�'� E 7(� �� � 1 �� � 7 ����� �$�� ����������� ����� ����� �������� ��� � � J��� '/�� ��� ���� � 1 �'2�(��� �� ���� � ����� ��� ������ ������(

��� �������� ������� �$��� ��� ��$����P <G'G �D�D$F &:): �D�D�F <&)) �D�D�F

&))G KD�D�F �/! �DKD�F &))G �D�D%F <!G �D�D�F &))G �DKD�� ; � �� �� �� ������$� � ���� �� O ��� ��� ���� ��� ������ ���� 1 �7P <G'G �D�D$F �/! �D�D�F

&))G �D�D�F <&)) �D�D�F &:): �D�D�F <9G �D����D�F /!: �D�D��

��� '�( '� � � � �7 � � � 7(� 1 �� � 7 ��� '�7�7 � � � �7(� 1 '��� � 7(�4�

'�( /��� �� ��� ��� ��� ����� ������ ,� 1 ' � � � �7�7�7(� 1 �7�4P

� � � � ,�� � � '��7(� �� & � � �� ; � & E 7� � � ; E& 3 ;�� E 7

�� � 1 '��� � 7(�4� ��� �������� ��� � � ������� ��� �� ��� �� � 1 ����� � 7�

'( �/! �D�D�#F <G'G �D�D$F �/! �D�D�F /! KD�D�F <&)) �D�D�#F &))G DKD$F

&:): �DKDF <!G �D�D�F &))G �DD�� C/��� ������� ��� �������� �� L�� !�����D

��� ��F� ��������� � G����� ��� � ��H �� ��������J��� ��� ����� � ��� ����� ���� ���� �� ��$� ����� ��� � ������� � 4� 5� �� ��� 77 ��$� ���� ���$�� �� #� �� �����4 ���� 77 ��� 5 ���� �� �� � ������� �� ?� #���P

9/( )��� <������

I���� +!"+ L F: �< �?@> F� +!"+ : F��� +!"+ $

M /(=& E@$J�$%4�J>�>��J� �� '�������������(9/( MN:�$J

I��� +!"+ L ?�� � ��� � ��������� /(=& E4%>4%>4%>4%>4%>4OE>##@#$##%##>##@# B ������� � 4 � 77 �� C7�8 � � �55D

/(=& E@>%$#@>%$#@>%$#@OE#>#@$#%#>#@$#%#> B ������� � 5 � �� �< C%?? F��� �< C# F��? �< C$ F, �< C>

9/( E$##

���� 9)/G ���D����F 9)/G ��?D����N@

9)& ,DI����D@F <G' ,D,DI��� I������ � ��� ���$P :/! �D���D���F &:): �D�D��?

<=/G �DI���D, ��������J� : ���$� �����<9G �D���D%F <!G ���D���D�$F /! ���D���D�I������ �� ��� ���� : $�� ���<9G �D��?DJF <!G ��?D��?D%4F /! ��?D��?D�

&)) ,D,D@F ': ,D$' -����� ���� ������� I����

/��� �� ��� � �������� ��� �� E ��� � � � � �� � 1 74� 7�� � � � � ���� �� ( P

� �< C# F�� �< C$ F� �< C% F�� �< C� FI �< C> F� �< C?

9)/G IDI����D#F 9)& ��DI����D@

<"= �D$�F :"+ �D$�1$�D�F <!G IDIDJ ;���� ���� � 1 74�$P <! �D�D$ � � �'�� � ((����%P <! ��D�D�F 9)/G �DI���D��

&:) �D�DE� F <9G �D���D�

&:): �D�D�F <=/G �DI���D�� )�� � � ����&)) �D�D�F ': �D%' !�$��� �� � �����<!G IDID$F ':Q ID�* B$� � ���� �������� ������

%P 9)/G ID��D#F �:(9 ��D@ -��� �� ������ ����/! �D�DEB F ':Q ID�* � �������� �������&)) �D�D%F R� %' ���� ���� 7�* ���������

Page 82: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ **

�����������0!��� ��7���� ������#����������(#0�������(���(%�������#�&�0%�����(���(%�������������(�0 !0�&#��E����!F����G

%P <!G IDID$

�P &)) �D�D%F '"S ID%' ��� � � � E � ���� � �� �������G9 �D�D�F <G' �D�D�F ': �D$' -����� ���� �� ( �

/�� � ����� ����� 77��,E57 T� �� � ��� � � ���� ���� ��� ���� ������ �� �����I7"I* � I����� 7�4��SI� ������ 7��4�, E :75:4T '����$�� � 7��8 , E �75457T�� ������� 7�4��S"7:(� C��� I� I�������� �-���-� � 2� !�� /*�����* '78*�(�7�"45� �� ��$���� ����� ��$� $��������� �� ������� � ������ ���� ���� �� ������ ��� ��� ����������� ���� ��� ���$� �� � ��� �� ��� �� ���F� ���� ;�������� ��� ��� ������� �� ������ ���� � ��������� ���$�� ���� ������ ���� �� � ������������ (� E �Æ ��� (� E '� E 7(Æ� �� � ������� �� <� L� <����� ��� /� -� I������"���� 2� � �� '78 �(� :*4":**6 �� ;��� ��� -� @� @ ���� ��� �� '78��(� 7�7"7���@��� (� �� �� 0 ��� ������ � � Æ �� ������� �� ��� ��� ��J�6 �� ������ ��� ������������� �� � 1 �� 7� � � � � ��������� ���$�� ��$� ���� ������ ��$�����6 ���� ���������� /� -� %����� "���� 2� � � '7888(� 7477"7475� ��� ��� ��������� ���������� /�� � ��� ��� � � � ������ �� ��� � ���$�� �� � � ���� ����� ��� ������� 74�� ������� :7*�4� :584 �7�7�� ��� ��� ���� ������ ������D

�� '7 E 7 E �5 E 7 E 7 E �5 E 7 E 7 1 5 (��6 ��� ��� ��$�� ���� ����� �"5�� �T� �� 7 � 7":88 � T� �� :� 'Y����� ��� ��� ��$� ���� ����� �� ������������������� � ��� �������6 ���� ��� ������ � �� �� 7� ���( /��� ����� �������������� �� � �� �� ��� <��F� 2+-� ���� '%�� Z��P 787:(� ����� 4�� ��� 4*4�

�� #� �� � ������ �� �������� ������� � ��$����� �� 7� '��� ������� 7�4�7S"7�(6 � �� ���������� �� ��� �� ������� �� �� �� � ����� ���� �� ������� ���������� ��������������� � � �$���- ��� P I � ���� � ��� ������ *'� �� ���(� ����� �� �� ����������� �� 5�������� ���� � � 7�������� ��� �� �� � ����� �� ������ ���� ���� ��/�� ���� �� � � � ���� � ��� �������� 97 �� &:) C#D�DTE UF <9G C#DC#D�F

9)/G C$D����DC#F <!G C#D�D%#F >&))G C#DC#DC#F <!G C$DC$DC#F &:) C$DC$DE$ �

C/��� �� ��� ��� * ����� ��������� '�� �����(� 1�� �$������ ����� ���$������ ���� � ����� � ������ ��������� ��� ����� �� ��� ���� ���� �� ��� ����� ���� ����� �� ��� ����������� ,� ���� O �� K9)'G C$D����D�F � �� �� �������D

��� '�( ''��7(� �( E �� C/��� ������� �� ����� � �� ���� � < ���� #�� �� ������� ���� ''��7( �( E 7 1 '� 3��( E ��D

'�( '� E �( �� ����� � 1 '��7(� ��

'����( ''� � �( E �( 3 �� ''� � �( E �(� �� ��� ''� � �( E �( 3 �� ����� � 1 ��7�

'�( ��'�(6 ���������$���� ��'�E7(� ����� � 1 � '��7(� C/�� � ���� '���7�77�(���� �������� � � �� ���������� ��0 ���� � � ��������P ''� E 7( 3 2�(� 7�D

��� ! 7 ��� �������� �F� �������� � '�� �������� '7�7�77(� �� '���7��(�(6 �7 �� ��

� � ,� 1 ,��� � ',��� � ��( C��� ��%2 '78�:(� 7�5D� /��� ������� ���� ��� ����� ������� ,��� � '�1(� ���� � � � � %� �� �� ����� ���� ,��� 1 ��

� � 7� '/���� ������$��� � ���� ��� � � ��� ,� � ,���� ����� �� �� ��� GJ��H �������6 ��� '**(�(

��� !����� K(<Q ���D�DJ>F � './(� ������� ������ 7T � ��� ��� ��� ����� Q� '.0(��� ������ ���� � ���� � �� ���� $& ��% C�D 1 *�

��� �� ��� &��� ����� ��� �� ��� ���$�� ���� � 1 �� ; � �$�� ����� ���� � � ��������� ��� ��� ����� ���� � �� � ����� ������� �� ������ 0 ���������� �� ������������� ���� �� ���� � �� �� �� �� � ��J�� :���� � ���� �� � ������������ ��� ����� � �� �� ���� ��� � ��� ���� �� 7� � � � � 4� �� �0 ����������� /�� �$����� ��� �������� ��$����� ���� ���� 47�5 ��� 1 7*�5�

Page 83: The Art of Computer Programming - Bitwise Tricks and Techniques

*< ������� � �8������ *� �"

� �� ���� ������� ����0��0�� �0�� ��� ���GE���!���0E��/����(� 0�����0 �������F�� �������!�0�� !�����((�������((���'����� ����(

��� K:"+G �D�F &:) �D�D�F �G9G �D������,�D�F <!G �D�D?@F 9)' ���D������D�F ������������ �� , E 7:T� ���� �� � ���������� �� � ���� � � ����� ���� �� ���������� � ������ � ����������� !�� 7T �� ��� ������ �� ������ 4��

��� �� ���� �� ���� ���$� �� ����� ���� ���� ������ 8:��� � ������ ������� ������ � G������ ���� � ����H �� ���� ������� 8�8�� � ���� ��� �������� ��� ��������� ���� � 1 �� 6 8�87* � ���� ��� ������� ��� ��� ��� � 1 �� /�� � ���������%#@�%>�#�@�@%$%4 �� ��0 ��� ����� �� ��� ����� ���� �� ����F� ���� � ����� � ������������ ��$� ��" �� C4�:��D ���� � �� ���� � �� � $���� ��� ��

��� I��P �� �� 1 �� �� ��$� ������ � 1 � 1 � � � 1 �7�� ��� � 1 H7��6 ����� � � 1 '� � H(�7� 1 '� � 7( � '� � 7(� �� �� �� 1 � �� ��$� '� � �( �� ���� �1''��7(� '��7(( �� �����

�� <�� �'�( 1 � � 4�� ������� �'��( 1 ��'�(� ��� �':� E 7( 1 :�'�( E �� #� �����$� �':� � 7( 1 :�'�( E �� �� ������� 4:� /�� ������ �������� ������

=�$�� � ��� � � � 7� & � � E � � � � � &� � � & 3 �� ��� � � � 3 ��������� � 1 ���� ��� & 1 �4���� � � � � 1 & � � 1 � !�� ���� �� -����������F��������������� ��� �� � � ��� � ��� ��$� 7�� C@� I�������� ����*�� � '����(������ �*� 7: ��� ����������� �� ��� ��$� �'��( 1 �'�(�D

�� '�( /�� ������ � � ��'��7(� � � ��'���(� � � ��'��:(� � � ��'��*(�� � � � '� � 7 (� � � � � '� � 4�( ����� � � ��� '��( �� 1 ''� E 7( 3 2�(� 7�

'��� �������� � ��� ��� 77� �� ���������� � ��6 ��� ��� ������� �� �(

��� ������ K(<Q �D�D��� F ����� ��� *9/=G �� '..(� ����� ��� 1 �� �############# 6��� ���� '..( ���� K<!F '�� K<!GF(� % ����� �� ������ � '.�(� �� �����%C�D 1 �7�

��� K <!G �D�D$F /! �D�D�F <!G �D�D%F /! �D�D�F <!G �D�D>F /! �D�D�F ���F

<!G �D�D�%F /! �D�D�F <!G �D�D$F (� G �D�D#F &))G �D�D�F ����� 75T�

� � '�� ��� �� @� �� #������ L��( <�� �'�( ����� ��� ��� �� � �������� � � ��������� �� �� ��� &��� ���� � '.*(� ��� �� � 3 �''� � 7( 3 2�(�

��� � ���� -� 1 -� 1 �� �� � 1 � 1 �� '.1( �������� ����� ���������� � �� ����&�� -�� ,�������� � 1 '7�(� ��� � 1 '7H(�� �� ��� ������ ������� � ��� H ����� 1 H 1 �6 ��� � � � � �� � � 3 �� ,� ��� ���� ���� �� -� � -� 1 �� �� ��$���� � �� �3�� !�� @� �� #������ L��� ���� ���� -� � -� �� ��� ��� �� � � �3 2��

��� '�(��

���'�(�� 1��

��� ����'7 � ��

�( 1 ��'7 � �( ���

��� ����'7 E ��

�(� /��

+������� ���������� � ���� �� �������P��

���'�(�% 1 N'�(�'�% � 7(�

'�(��

���'-(�� 1��

��� ����'7� �(�

'(��

���''(�� 1��

��� ����''7� �('7 E ��

�(( 1

����� ��

�,�'�(� ����� ,�'�( 1

'7 E � E � � �E �����(�'7� ��

���(� '/�� G���� �����H � '�*( ������� � ,�'�(�(

C��� $!�����- ��1!��-�� �� L��I� !�� �� ��� L� ������� '���4(� ������� 4� ��� ����� ��������� �� � ��� � ����� � ��� '� ���� ���� ����� �� '� ��� 4��D

��� 2������E'2�E�(�����E � � �E'2�E�=��(������ �� ��� ��� � =� C+� ?� A� ���

/-� �3�/ 2�*��� '78�7(� �� 78"��� /�� ������ ������ � ���� � � ��� ��� ��������� Q���� 4�7 ��� 4�� � ��� �� �� !�� �� ��� ��������D

��� /�� �������������� ������������� � '�+(� K<"= ��D#F <"= �D�F 'Q �D)���F

$P &)) ��D��D$F <G'G �D�D$F &:) �D�D�F ':Q �D$'F ��� '5 E :'�(T6 �� ����� ���������������� � '�)( ���� '� � :� ���� ���� '� 1 :� ��� ���� ���� '� :�

; � �� �� ��$� :T ��� ��� ������������� � '�)( �� �� ������ ��� &���� �������������������� �� K� � � E '� � *(� � � � E '� � 7 (� � � � E '� � 4�(�' � � 3 � F� C,� ���� ����F� ������ ����� ��� K<&)) ��D�D#F �� � � �������D

Page 84: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ *?

�������-�#� ����������//:�//�?�//�D�//�)*�//������������!�F� ���� �������&���# ���� ��������� ������ ��������#��//�1�����/&�(���� ���# ��������

��� <�� ���� � � �� '����� �� �� �� ��$� ��� ������ �� ������ � ������ �� ����$� �� �� �������� � ������ ��� �� '���'���E��( 1 '����E'�����E��'�� /�������� �� ��� ����� � � '�)( � ������ ������� � � :���� ������P

��� � � '� � 7( 3 ,� ��� � � � � ����� � � ''� E '� � �(( 3 ,�( E ''� 3 2,�(� 7( ��� � � '� 3 ,�( E ''� � �( 3 ,�(���� � � ''� E '� � :(( 3 ,�( E ''� 3 2,�(� �( ��� � � '� E '� � :(( 3 ,��Q������ '��� � '''!�( �� ���(� 5 ( E ''''"�( �� ���(� 5(� 4(�

����� ! 1 '77777777(�� ��� " 1 '�7�4:5 �(���

; � ������ ������ �� ������ � ����� ���� ��� �������� ������� � ��� ��P

<&)) ��%D�D�#

<&)) �D�D�$

%&))G ��%D�D��%

<&)) �D�D�%

>&))G ��%D�D��%

<&)) �D�D��

@&))G ��%D�D��%

<&)) �D�D�>

$J&))G ��%D�D��%

<&)) �D�D�?

<9G �D�D?

&)) ��%D��%D�

C�� �������� '���� 1�

� ��''�3 2,�(� ��� �� �''4� #!��� �� : '!���� 78*4(� �:"4��D

�� <�� % 1 '� � �( 3 '� � �(6 ���� �� % 3 � 1 %� C-���� � �� ���� ���� ���� �� �� ��� ���� ��� ��������� � �����������J� ������ ����� ����� � ��������� ����� ���� ���� ���� ������� ���� � ������� �� ��������� ����� G������� ���H �� ��� ������� 5��� /����� 6�78��9 '7� Q��� ��� ����(�D

�� <&)) �D�D�F :�/! �D�D�F (</) �D�D�F ��� ���� � �� �-$55�O$55,.� '�� ������������� ����� ���� �������� ��� ���� ����&�� �� � �� ���� ���� ��$� �� �������(

��� � � '� � Æ( 3 6� � � '� 3 6(� Æ� � � '� 3 �( � �� ����� � 1 6 '6 � Æ(�

��� =�$�� Æ� ����� ��� 4Æ 1�Æ��

��� J���������� ��M����� ������� ��� ���� ��� ��������

���� ������ '��� ������� :�5�4"4��( � ����� $�� Æ ��$�� 7E����

�� '4�7( ����������

� � '�( /�� ��� � 1 ��%�E� � �E��%� ��� � � � � ��� � �7� ��E7�� �� �������������� � � � � � � �� ����� �7� �4� � � � � 7��� ��� �� ��� ��� ��� � �� �� ������������ ��� ' E 7� ��(�� ��� �� 7 � � � � @��� � � � !�� � ������ �� ��� 4�

� ������ �� ��� � � 4��� � ���� ��� ���'�( ������� 4'�( � 4'�( E 4'(� ��� �� �� �� ��$���� � &���� � ���� ����

/� � 4'4�( � � ��� 4'� � 4�( � � E 7� Q �������� ��� ��$����� � 4� ���� ������ Æ������ ���� �$�� $�� �� � Æ6 ��� ���������� 'Æ��(������ ��$� ���� �� ��$�4''4� $ 7(��( � �� /���� ���� � ��� ���� ��� ���� � ��� � '�( ���� � ��

'( /�� ������ ��H68�U ���� � 1 H 1 6 1 8 1 U 1 �� �� ������ �U�86H�� ���� � '4E 7(����� ������ �� �� 'E7(������ /��� 4'( � ����� �������$���� ���� @��� 4'4�( � 4' ( E � 1 :� ��� 4' :( � 5� !����� �0 ����� ���� �� '�(�

������������ 4' 4( 1 : ��� �� 4'�( 1 4'8( 1 �� /�� ���� � �� �� '�( � ��� �� �� ��� ���� $�� � � 4'( �� 7 � � ��� ����� ���� 4'7 ( 1 :�

�� ?������ 1 '�� � � � ����( �� ������� ������� ������� <�� � 1 '�� � � � ��( ���� 1 �� E ����� � ���� ��� � � 1 � ��� �� � ��� 1 � E �� �� 7 � � � �� <��V� 1 �� ��� V��� 1 V� � '�� � V�( �� � � � � �� '/� �� �� �������� V� 1 �� ������ V� 1 �� ��� ��� �� � ����(

!�� �� �� ��� ��� � � ���� Æ������ �� Æ 1 Æ�� � � � � Æ� ��$� ������ ��� ���� ��� �� � � � �� � �� � � � ��� ����� ��� � ���� �� ��� ������ � E W� �� ���W� � V� � �� � � �� � Æ�������� ������ ��� � ���� ���� ������$� ���� ��� ������ ��� 1 �� ��� �� ��� �� � � E 7� ��� �� W � V� ������� W � �� /������� ���������� ����� � � � � ���� ��$���� ���� ���� '%�� ���� � ������� � � � ���� � ��J� ������� �� � � � ����� ��� �� �� � ����� � ����� � ��J�� � � ��� ���� � �� � � ���(

Page 85: The Art of Computer Programming - Bitwise Tricks and Techniques

<5 ������� � �8������ *� �"

F�����0!�0�� !���������M�� ����������������� �� ���M��(!���' ������������

�� '�( �� � 1 '���� � � � ��(�� �� � �� ��$� 6��� 1 ����,������ ; � �� � � � � % � 7�� �� ���� 6� 1 ��,��� � U6�� ����� U6� �� ��� ���� � ,����

'�( <�� _'%� �( �� ��� ��� � ��� � � ���� ��0 ����� ������� _'7� �( 1 ��� #���% 7 �� ���� ��$�� �� ���$����

_'%� �( 1 �'6�� � � � � 6���� 6���� U6���� � � � � U6�( � 6� 1 6���� " 6������ U6� 1 U6���� " U6��������� GJ������ �������H �� ��0 ���� '6��� � � � � 6

���� 6

����� U6

���� � � � � U6

��( � _'%�7� ��( ���

'6��� � � � � � 6����� 6������ U6

����� � � � � U6

��� ( � _'% � 7� ���( �� ��� ���������� 6�� U6�� ��� ��� ����

#��� � �� ��� ��� ������� ���������� � '*.( ��� ��� �� ���6 � '6�� U6����� ���( �� ������ ',���� �� ����� �����( � '�� ,���� ������ ����(� ; � ���� � �� �$��� ���������� ��� ���� � ��� ����6 � 6� 1 U6� �� ��� ���� � ,���� ��� �� 1 ��� 1 ����C������������ �� _'%� �( 1 ����'% � 7(�����

���'�� � 7(,����� ����� � �� ��.�D

�� ��� ���� �� �� �������� ��� U6��� 1 � � � 1 U6� 1 � ��� ��� ��� ���� ����� '*0( ��������� ,� ��� �� ��� '�( �� � �� � ��� ��� ����� �������� ������� � ���� '*0( �� ���� ; � ������� 5* ��$�� ���� ���� ���� ��� � ���� ������� � � ��������$� ��$����� ������ �� ��� ������ �� ��� �� ������� �� '*0( ���� U6� 1 � ����� �� /�� �� �$��� � ���� ���� ������ �� �� ������� ���� 6� 1 � �� � � � � %�7�

�� /�� ������� �� ���� ���� U6� 1 � �����$�� �������� #� ����� ������� ���6 ����� �� ����� � ��� ,F�� �� ������� �� ������� ,� 3 ,�� ������� � ������� �����0 ����� ���������� ��� �????????6 ��� , ��� �� ������ ��� ��� ����� ��$��

'�( 6� 1 , 3 ,��� ��� U6� 1 ',��� � ,���( 3 ,��� �� � � � � 56 6 1 6�� '@���,�� 1 �� / ��� ��� G����H ������ �� X�� '���� � � � �������(�� ��� U6� 1 ,���32,��(

'�( 6� 1 6 1 U6� 1 ,��� 3 ,6 6� 1 6� 1 U6� 1 ,��� 3 ,�6 6� 1 6 1 U6� 1 ,��� 3 ,6U6 1 U6� 1 �� C��� L� <������� ���� ����� ���� '78�*(� 4�" :�� �� � ������� ������D

'( 6� 1 ,��� 3 ,�6 6� 1 ,��� 3 ,6 6� 1 6� 1 ,��� 3 ,�6 6 1 6 1 ,�� 3 ,6U6� 1 ,��� 3 ,�6 U6� 1 ,��� 3 ,6 U6� 1 U6� � 6�6 U6 1 U6� � 66 U6� 1 ��

'�( 6� 1 ,��� 3 ,�� �� � � � � 56 U6� 1 6� �� � � � � �6 U6 1 U6� 1 ��

�� #� �� ����� 8 �� � ��� � � % � � ������������� '��&�( � � � '���$&��$( '���������� 5����"�(� /�� ���� ����� ��� �� �� � ������ ����������� '�&( � ��� ������������ ���� � � &� �������� � � '�& � ��(����� ���� ���� ,��& 3 2,�� #� �� ��� � � � ���� �� '��&�( &���� � � � � '����&���( �����

�� ����� ���� ��� ������ �� X� �� � ������ �������� �������� � ��� ��� �����8 1 '�7 � � � '% � 7(( �� � ������6 � �� �� �� ����$�� �� ���� � � '�& � ��(�������� '�� &( 1 '�� 7(� � � � � '�� % � 7(� Q� �������� ���� % 1 4 ��� ������� ���� �� ��7�4:5 �* �� 74�:5� * �� 75� 4�:*� C= � ������ � ������ �� ���������$� '% � 7(��������� ��P #� �� � � ������� ���� ���� ,�����3 2,� �� %�7 � � �� #��� % 1 4��� ����� ����� 7�4:5 �* �� 7�5 4:�* �� 75� 4�:*�D

/�� ������ ����������� �� ������� 5�'�( �������� � % 1 ��� '�� &( 1 '�� 4(�'7� :(� '�� 5(� /���� �������� ��� ��� ������� 7:������ ��� �*����� ����� �� * � *������ ����������� ��� ������� �� ��� ����6 ���� �� �� ��� �� ��� �����

Q� ������� 5�'(� �� % 1 ��� '�� &( 1 '�� �(� '7� 4(� '�� :(� '7� 5(� ?������ 5�'�(�� �� ���� �� 5�'�(� ���� '�� &( 1 '�� 5(� '7� :(� '�� 4(�

�� /���������� �� ��� � ��$������ ��� ���� � ��� ���� ��������� � ����$��������� � ���� �������� ��� � � 7 ����� �� ��� ��������� ��� ����� � ��$����� ���� �������� �������� � ��� ����� � ��$����� � � ����� � ��J�� 7� � � � � �� ������ �� ��� ���� �������� �� � � � � ���� '��� �� � � ����������� �� ����

Page 86: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ <

��������!#�!������� ��-���&��#����-�!�����0���9�%����������

���� � �� � ���� � �� �� ��� ������� �� ��� ����(� @���F� ��� ���� �� �� � 1 �P

��4$5

## #� #� #� #& #, #*�# �� �� �� �& �, �*�# �� �� �� �& �, �*�# �� �� �� �& �, �*&# &� &� &� && &, &*,# ,� ,� ,� ,& ,, ,**# *� *� *� *& *, **

*�0'"6

## �� #� �� #& �� #*�� �� �� �� �� �, ��

�# �� �� �� �& �� �*�� �� �� �� �� �, ��

&# �� &� �� && �� &*�� ,� �� ,� �� ,, ��

*# �� *� �� *& �� **

���0'"6

## �# �� �� #& �& ��

#� �� �� �� #, �, �,�� �� �� �� �� �* �*�� �� �� �� &� �� ��

&# ,# �� �& && �� ��

&� ,� *� �� �� ,, *,�� ,� *� �� �� ,* **

�&�0'"6

## �# �# �# �� �� ��

#� �� �� �� �� �� ��

#� �� �� �� �� �� ��

#� �� �� �� &� ,� *��� �� �� �& && ,& *&�� �� �� �, &, ,, *,�� �� �� �* &* ,* **

� =�$�� � ��� �� &��� ��� � � � '����( ��� � � � '����( �� �% � � � 4%� /������ � � '��������(����� � � ���� ���� ,����32,� ��� � � '����������(����� � ����� ���� ,����32,��� �� � � � � %� Q������ ��� � � �3�� ���� ������ � � � '����(� � � � � '� � ��( �� �% � � � 4%� ��� � � � 3 '��� � 7(� C/�� ���� �� � ��� �� � � ������ � 1 '���� � � � ����������������(� ��� � 1 '���� � � � ����������������(����� ���� 1 ��� ��� ���� 1 ���� ���� �������� �������� � ���� ���� 1 ��� ������� 1 ���6 �� �3� ��� ��� ������� � ����������� �� ��� /��� ����� �� � � �T� -� I���� ��� <� L� ��������� #� 2� !�� ��� �+���� �-�� �� '78� (� �7�"�74�D

� Y�� '*0( ���� 6� 1 U6� 1 �� 6� 1 �##$#%#$$%%$$�%�$ � 6� 1 �###@#�#>###@#�#J �6 1 �######4%##@$##�% � 6� 1 �############# $J � 6 1 �#########�$44�%J � U6� 1�#####�4 ####4#$� � U6 1 �##��##�?##$?##%� � U6� 1 �###$#�#@#�#�# #� � ��� U6� 1�##%##�%#��%����� �

�� /�� �� ���� �� ��� ��� ���� % 7 ��$� ����������� ��������� � ���� ��� � ������� �� ���� �� ����� ���� � ��� ������� ��� �����$�� ����� �� ��������� � ��� '��� ������� 5�4�:"55 �� ��� �� � ���� ����� ��������(

�� '�( ?$��� ��M����� ������� � ��� ������� ��$�� � ��M����� ���� ������ ��� ������� �� ������ �� ���� ��� ��� � ���� � � �� � ���� � �� ��� � � �� � � ( � '! ������� ���� ���� ������� �� ����� � G�������H( /�� ��0 � � � ���� ������ ��� � �� ���� '�� �� �( 1 ''� � �(� �( E '� �� ��( ����� � �������� ����� ��$� ���� �����

'�( #� ��$� '�9� �� �( 1 '�9� �� �( �� ��� ��� �� � �� �� 1 � �� �� ��� �9�� 1�9 � �6 � '!( �� ��������� !�� �� �� ��� � ����� ��� �� � ������� 9 ���� ������&�� '!( �� ������ �� � ��� �� � � � ��� ���� �9 ������� � ���� 1 '�9� �� �(����� � �����P �� � 7� �9 ���� ������ � ���� '�9� �� � � 7(� ���� �� �� � ��� ��� ��� � ������� '!( ���� ���� �� �� � �� �� � ���� � �V��� �$�� �� �� '�9� �� �(�

C�� ���� �����-���� ���� '78�5(� 77:5"7755� + ��� <����� ��$�� ���� ������� '!( �� �������� ��� � ���� �� �� �����������--��' 9 � ��� ��� �� 7� � � � � (�7���� ������� ���� ��� ������ �� ��� ��� ������ � �� ������� ��� ������� �� ����� �� ������� 4� Q �������� ��� ������� 9 ����� �� ��� ��������� ����&��� �����9 1 ! 'G���� ���H � G��F�����H( �� ��� $�� �� � �� /�� ��� ���� ������� ����� ���$� � ��������� �� ���� ����������� <�����F� ��� ������� �������D

'( � �� �� 1 � �� �� �� ��� ��� �� � � �'� � �(6 � � � 1 � � � �� ��� ��� ��� -'� � �(6 ��� �9 1 �9 �� ��� ��� �� � 1 �� ���� 9 �� � ���� ������

'�( -'�9� �9( � �'�� �( �� ��� � ��� � �� ��� ��� �� -'�:9� �:9( � �'�: � �:( 1�'� � �( �� ��� � ��� �� ��� �� : �� � ���� ������ C%�� ���� ��� ������ �� ���� ����P ;�� �:I ������� �� ��� ������ � �� ���� ����� I �� ������� &���� �&�� : �D

'�( =�$�� � �1 � �� � �� ��$� ���� -'�98 � �98( � �'� � �(� ���� 7� � ��� � ���&��� �� ��� 9 ��� 8P /��� -'�98 � �98( 1 -'� � �( � �'� � �(� ���� �� �9 �1 � ����8 1 �P /��� -'�98� �98( 1 -'�9� �9( � �'�� �(� ���� 4� �9 �1 � ��� �8 �1 �P /���-'�98 � �98( 1 -'�9 � �8(� <�� � 1 �'� � �(� ��� � ���� -'�9 � �8( � �� /���

Page 87: The Art of Computer Programming - Bitwise Tricks and Techniques

<! ������� � �8������ *� �"

!������2�4 ��!!����(������(!�0�� !���

� �� �� 1 � �� �� ��� �9� � 1 �8 � �� @��� '�9� �� �( 1 '�8� �� �(� ��� ���� ���������� ��� �9 ��� �8� ; � ���� �� $�� �� ���� �� �0 ���

� �� �� ��������� ����� E�'�� �( �� ��� � ���� � ������� ���� ��$� ��� ���������� C� � � �D� / �� ����� ��� � 1 -'���(� �� 1 � �� ��� ��� �� 1 � �� ��6 ���� ������� 1 ��E������ ��� E�'�� �( 1 E���'�

�� ��E��(� � ����� ��� ������� �� ��� ������ ��� ���� ����� �� � ���� ���� O �� ������� ���$��� ��$�� E���'�

�� �� E ��( 1E�'�

�� �� � 7( EE�'�� ��( E ''�� E7(�� ��(� Q������� �� ��$� E�'�� ��( 1 �'�� E 7(6 ���

E�'��� �� � 7( 1 E�'�� �� � 7� ��( 1 �'�� � ��( 1 ����� � ��� E �'��(� ����� �'( ��

�$�� ���� �� ������� :��

�� ! ��� � ������ � �������� � � ������� �� � &� � &� � �� � �� � &� �� � � � &���� � ����� � ���� ����� ��� 1 �� ��� K� � &F � K& � �F ����� ���� ������� ����� ����� � � &� K� � �F ����� ���� � 1 � � 7�

#� �� �������� � ����� ���� ����� �� �����P =�$�� ��� ����� ��� � ������ &�� ���� �� 7 ���� �� �� ��� �� � ���� � ��� �� 1 ��� ���� �� � ������ &�� ���� � � 4 ���� �� � ��� �� � ���� ���� � ���� ���

����0 ����� ��� ���������� � ���� �� >'�( 1��

���������%������� � /�� �������

� ���� � ����� �� �� >�'7( 1 X�� � ��X� 1 �

��� E �� �� �

�O E 5'��(� /�� ����

� �� �� >'�( 1 '��R(��'�(R 1�

7 E 5'����(6 ��� ��� $������ �� >':( � >'�(� 1' E 7� >'�((>'�( 1

�7 �� E 5'(�

�� /�� ������ �������� �� � '��( �� �� ����� �� '�%�7(���� 1 (%� ��( ����� / ���

��� ��$���� ���� ����� ����� ��� ����� � ����� C��� I� @���� ��� -� ������������-���- ����*� ��� * '7� !���� 78*�(� 7:*"75�� %�� ���� ��� ��� � ��������� ����������� ���� ����� ��0 ���� �� ����� ��( R (% � (��� � ���� � �����6 � ����������������� �� ������ ���� �� ���������D

�� '�( � 1 �� '��( � � �� �� �$��� '#��� � �� �� �� ��$� '� " �(� � 1 '� � ����( "'�������(� �$�� ���� � � ��( '���( /��� �������� ���� �� ��� ;� �� �� ��� � '��� ������� ��� ���� ������ ������� ;���� ������ �� ���� � 3(�

�� ,''� ,�( E '�� 3 2,�(( 3 2,�. ,''� 2,�( E '�� 3 ,�(( 3 ,�.� '��� '1�(�(

� ��'��( E &'��( 1 ��'�(� E &'�(��

� '�( &'�( 1 '�'�(�'7E�Æ(( �� ��6 ��F� ��� ��0 � �������� � ������ ���� ���� � � ���� '7E�Æ(&'�( - �'�( '�� � ��(� '?0 �$�������� & �� ��� ��0 � ���� �������� � ���� '& � '& � Æ(( �� �� 1 ��(

'�( #� ��� �� ���� ��� �� ���� 1 :�� ��� ���� � 1 '���� � � � ����(��� �& 1 '&��� � � � &�&�(��� � ��� � � �6 ����� ���� ������� 4 � ��� &� � ��� � '��( ���� � &� � 4 �� � 1 �� 7� � � � � � � 7�

'( ��� � � &� � ��6 ���� &� � �� � � ��� � � &� � �� � 1 7� �� � � � � � � 7�'�( ����� ���� � � � ��� � ��� ������� �� � 1 �� 7� � � � � � � 7P ��� � � �� �

� � � � '� � 4(� � � � � '� � (� � � � � '� � 7�(� � � � � '� � �:(� � � � � '� � :*(�&� � � � �� � � '� � 7(� �4%>4%>4%>4%>4%>4 �

'�( ����� ���� & � �� /���� �� � 1 7� �� � � � � �� 7� ��� &� � &� � '&��� � 4( ���'�� � � � � 7( &��� � &��� � '&��� � 7(�

�� <�� 1 � � 7 ��� � 1 � �%� �� �� � � � �� ��$� ��� - ���$ E �$ '�� �

��E��E7(� ����� � 1 ��� �� ��� ����0 ������ �� & 1 '&��� � � � &�&�(�� ��� � ����

; 1 � � ,''� � %(� '� � �%(� '� � 4%(� � � � ( 3�����.

� ��� � � �0 �� '&��� � � � &&�&��� � � � &�&�(�� Q� �������� ���� 1 : ��� % 1 ����� �0 ��� � ���

�E � � �E���E�� �� � '��E�E7( �� ���E��

E'�����(��E

Page 88: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ <"

F��������7�(�G�!!!���,�1E����!�����( Q$ �����������,%* ��!���0���������!��������������

'� � �(�� E '�� � �� � ��(�

� E ���� E ��� / �� �� &� �� �������� � � ������

�� X�� & 1 �;���� " '; �� ��(� /�� � ���� ; �� �� �� ����� �� ������ �������� � ��� ���$� � �������� C��� -� I� ;����� �� <��$���� ��� I� )����������"���� 2� � �� '���4(� 7::4"7:5�6 �� '���5(� 7��7"7����D

�� <!G �D�D�����F G= ��D�����F �G� �D�D��

� %��� ���� ��� ���� �� ����� ���� �� �� ������� � � ��� ���������� &��� �������� ����� /�� ��� � ��$��� ���� � ������������&��� �������� ���� ������ �� � ������� ����� %������ ������� ����6 �� ���� ��$� ���� ��� ������� � ����� ����� ���� ������� � ���� ����� ��� ���������

������� ��� ��&���� ������ <� 1 � � � 7$����

7$����

7$����

7$����

7$� � ���� ������������� ��� ���� ����� �� � � ����� ���� � �$� �� ����� � ��� ������ ! �������� ����

���� 6� 1 � � � �$����

7$�7��

�$����

7$�7��

7$� ���$�� � ���� ��� ��� ���� ����������� ��

��� ������ <��� 1 � � � 7�����

���

7�����

���

7�� � ����� ������ �� 1 ���E ����� ����� ����� �$� ���� ������ � ��� ���� ���� �� ��� ��� � ��

��� �� ��� ���$� � ������� ���� ���� ��� ������ 8� 1 6� � '6� � 7( ��� � 7 �� �������� � ��� � ���� ��

�� <�� ��� J��� ���������6 ���� 6� 1 8�

� �� ��� ������ �������� 4 � Q �������� 8��� 1 '8� 3 26�(� ��� /������� �� �� ����� �� �����P

��� 8 � 2<� � � �� ��� ������ ��� ������� ����� ����� 8 �1 �P ��� � � 8� ����� � � � '� � ��( �� � � � %� ���� 6� � �� 8 � '8 3 2�(� ��� ��� � � � E 7�

�� � � % �� ��� ��� � ���� �� ������ ��� ��������� ����� 6�� � � � � 6��� ���J�� ��� ���� ����� �� �� ������ ��� '1/(� �������� ���� ���� �� ��$�� ��J������� 6� ���� �� ���� � ������ ��� �� ��� �� �� 1 � 1 � � � 1 �� / �$�� � ���� ������ ����� K6� � �F � K6� � � 3 ,� E '� 3 8 3 ''8 � ��( ����((.F�

C��� " �-$��� �� @� �� #������ L��� :�- �4� ����*�� '!�����"#������ ����(� 0�":6��� =� <� ������ L��� 5��� /����� 68�;<66 '4� B��� ���:(�D

��� ����� ���� � � �� + � '���(������ � � ���� ���� 6�� �� � 1 %�7� � � � � 7� �� ������� ����� � ������� ��� Q������ ��� � � � '� � � �3<� �� � ���� � G����H ��� ��(�

��� �����

� E ��

��� ?0 �$�������� % �������������� �������� � �� �� ���� � �������� ��� ����� 1 '�������� � � � ������(� ��� '����� � � � ����(�� �� ��� ���� ����� 7 � �� 7� � � � �

���7�� !�� ���� �� �� ��� �� ������� ������ '!������� 5���5-(P Q���� ����� ����� � ������ ���� � ��� ����� ���� ����� ��� ���� � �� �� ����� ����� ��� � ��Q� �������� ���� % 1 4 ��� �� 1 '��������������(�� ��� ����� �������� ������ ����$��� '��������������(�� '��������������(�� '��������������(�� C���)� ��� ��� -� <��� /-� ���� 2��� $�$/4<< '�??? �� I����� ����(� 74*"7:*�D

���� $�"�� � ��� /�� ;?�B� �� ���� �������� �� 78 5� ����������� ���� ���� �������������� �������P ��� �������� 'G������H � G���H( ����� ��� ��'�3<( # 2<� ��� ��� ��������� ����� 'G������H � G ����H( ���� ��� ���� ����

��� �� �� ��� ��

������ 1 �` �� �� � �� �� ` ��� ��� ��� ���� ��� ��$� �� ���� ��� /����F� � ������ �� ��� �� ���� ���� �� 1 �6 �������� ���� ���� � ��� � � �� ����� ����� ! ��� 7������ ���� ���&�� ������� ��� �� ' E �( �� ��

����� ����� 1 ������ �� � � � � �� ����$ 1 ���$�� � � ����$�� 1 � ��� ����� 1 ����

�� ��� ���� �6 ���� Æ �� �� ��� ������� $�� � �� ��� ����� � � Æ � ���$��� '#�F$�������� ��� � ������� �� � �� �� ����� ��� ����( � �� �� �� ��� �������� �$�� �� � ���� ���� E ��� E � � �E ���$�� 1 �� E ���� E � � �E ���$ E`E Æ �� ��� Æ � ��

'/�� 7������ ���� �� �� ���� �� �� ���� ����$�� � ����� ���� ������� � ������; � ��� ��� ������� ��� �� ������ �� � ���0 ��� ������(

Page 89: The Art of Computer Programming - Bitwise Tricks and Techniques

<- ������� � �8������ *� �"

����7(#� !��Æ%!��� !��!�0�� !���� �����&�������!#��������������:�//�

�� ?0 �$�������� ��$�� ������ � � �� � �� � � � � � � �� � � 1 �� ��� � 1 �� ��� � � � � � � �� � � 1 ��� �� ���� � ��� '����� � � � ����(� �� '�������1 � � � ��1��1(������� �9 1 �� �� �� � � � ���� ��� � � = � 4� �� % 1 7� � ������� �� �� ��� �����

#��� % 7� �� �� ��� ��� �������� ������� � ���� ���� � �� ��� � �� � ������ � ''��E =( �� �(� �� 4 �� �$��� �� �� ���$��� ��� �� � ��� ������� � '����( ������� '��( � ��$� ��� ������ �� ������ � ��� ��� � � � � � ���� ��� � ��� ��� � � � � � ����� �������� ���� ��$�� �� �� ��� �� � � � � � ��� ������ ��� ��� ��� � � � � � ����� !� ��� ����� �� '��(� �� �� �� ��� ���� ���� �� � � � ����� ��� ������� �� �� �� ����� ���� � � 7 ��� ��� � �� � ���� � �� � - = '�� � �(� �������� �� �� � ���� � � 7�! ������� ��� ���� ���� 4 �� ���

� ���� /��� ������ �� � ������ ����$����� $�� � ���� ��� �� Z � I� ,������!�+ "� � "��� %'��-������ �� '78 5(� 7* "788� #� �� ��������� ��� ����������� ������ �� � ����� ���� � GÆ����H �� � Æ�����6 ������� � '�3(� �� �� �� �������� � ��$�� �������� ������� � ���P � � ��'��Æ(� � � ��'�36(�''�36�(�Æ(�/��� �������� � '*0( �������� ����� ��� % ��������� ���� � �����

�� #��� � ������� ������ �����J�� � ���� ������ ��� � ��� �� ��� � �� �� ���������6 ���� >'( � ��R� ,���� ��$�� ���� >'( � ��5 ��� ��� �������� ��� ����� ���� ��� ������ ��5 �� �� ����$�� '���� � ��$��� ��� �������(� #���$� ���� ���� �� ��� >'( � � ��� %�� ���� >'4( 1 4�

��� -�������� �� ������� �� '����� � � � ����(�� ����� �� 1 C��� ������ �������������� � � �� � ������� �&� ����� � �� ��� 7� ���� ��� ������ ��� ���� ������� ���� �� ��0 ���� � �� ��� 7�D� �� � � � � ��� /� � ��� ����� ������ �� ������������� ��

� � 7� ��� � ������ ������ �� 1 4 �� ����������� �� '7���7�77(�� �� ��������� ���������� � ������ ������ �� �������� �� ��� ��� �� �� ���������� �� ���������� '� 1 E 7� �� ��� ��� �� � 1 �� E �� E � E �� E � � �E ��

����

�� � ���������� � ������ � ����� �$������� ��� ������������� � �C�P�D ��'� � �( '� � '���� � ����((� ����� � 1 � 3 2,��� 3 ,����

C��� T� -� I����� B� ,� -����� ��� <� L� ��������� ��%2 '78�:(� 7��"7� �D

��� �� � � ��'� � 7( ��� ���� �� $����� ��� �� �� ������ ��$� �� E �� E � � � E �� ��� �� � � � ��� ���� �0 ����� �� ��� ��� �� ��� ���� ��� ���O���� B��$��� �� ��$�'�� E � � �E ��(� '�� � � � ��( � '� � 7('������ E � � �E 7( � '� � 7(���� � ���

��$������� �� � � �� E � ��� ��� ��� ���� �� ��$����� #� ����� ��$�� ���������� ��E � � �E�� 1 '�� E7('���� � �������(E������ 1 ��E'���� � �������(�

; � �� � �� ��� ���� �� ����� $���� ���� � 1 ��E�� ��� �� � ��� ���� ������ E � � �E �� � '�� � � � ��( � '�� E 7('���� � 7( � �� �� ���� ����

� � �� 1 '�� 7(3<� '!�� ��� ��� �� �� 1 ''�� �� 7(3 �(E � �������� � '1.(�(/���� ������ �� �� ��� �� ��� ���� � L�� !����F� G��� ��J�����H � ����� '���7(6!���� ������ '1�( � =���� �� -�����

��� I������ ��� ����� ��� �� � ����� ���� � � < � 7 �� � ������ � ����6 ���� ������ � �� ��� � � � 3 <� $���� �� ��� ��� � � �� � <� '/�� ������� �� � < �� �� ����� �������� ���� � ������ ���� ����� ���� K%&))G �D�D��������F�(

; � ���� ���� ����� �� < �� � ����� �� � �� ��$���� G������$��H ! �������� ������ � ��� ������� ����� ������ ���� � � < ��� ��� ��� ������� ����� � �1 �P ���� � � 3��� $���� < � �� ��� ��� � � � � ��

��� ''� 3 <(� '�� 3 <(( 3 <� ',�� ��� � $����� ���� ��� �� �� � �� '01(�(

��� Z��� �� ������� � 1 �� �� '1�(P ; '� 3 2<(� ����� ; 1 '''� 3 <(� 7( E 2<( 3 <�

Page 90: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ <;

��&( (�����/�"����F��% ����G ��+ � F��,����8�������!���������(#��� � �(0���7' ����!�F��������������%)E����0�!��7���/��F��������� ��!��(

��� '/�� ������� �������� ��������� ���� � � � ��� ������ �� ��� ���� � � ��������� � ���� �� ! ������� $�������� � ��� & �������$��� ���� ��� ���� ��� ����� � ������6 ���� � ��� �� ��J� ���� ����� ����� � �� ;�( ��� � � � 3 <� � � '< � 7( 3 2<�& � ''< � 7( E 7( 3 2<� ; � 4'� 3 &(� � � 4�� & � 4&� ��� � � 7� /���� ������ �1 �� � ��� ������� �����P � � � ''� � �( 3 �(� � � � � 7� � � � 3 ;� & � & 3 ;�; � ''& 3 '� � 7( 3 2�(� '� E 7((� ''� 3 '& � 7( 3 2&(� �(� � � � E ''� 3 2&(� �(�& � & E ''& 3 2�(� �(� Q������ ��� �� ��� ������ ''� � 7( 3 <( '� 3 2<(�

��� � ? < 1 ; � '� 3 <(� ����� ; 1 '''� 3 <( � 7( E 2<( 3 < ������� �� ������ *�6� @ < �� ��� 0 ������ � �� ��� '���� ��� ��Æ ���( �� ��� ������ � ������� *4�

�� '�( �� � 1 9/(-�C�� �� �D. �� ��� �� � ����� ���������� � ��������$�� ���� ��������� ���� 9/(-�C� E 7� �� �D. 1 �� ''�� ''�3<(�<((3 <( ��� 9/(-�C� � 7� �� �D. 1�� ''�� ''�3<(�7((3<(� ����� < 1 '77777(�� �� '1�( ��� ������ �8� /�� ��� ����� 9/(-�C�� � $ 7� �D. ��� 9/(-�C�� �� � $ 7D. ��� �������� ���� ����� �< ��� :<�

'�( Q� ����� ����� ���F� ��� ����� �� �� �� � ����� � ������ 4� ��$���� C'���������(�D 1 '���������(�� /��� 9/(-�C�� �� �D. 1 '''� C�D� 7( E � C�D(� 7( E � C�D�',� � $������ ������� ������� �� ����� � � � �� �� � � ���� ���� ������� �� ��� �� �������� �������� ��� � �� �� ��� �� ������ ��� ������(

'( <�� � �� ��� ����� � ��� ���� ������� �� ���� ������ ��� ��� � 1 �7�*�#��� ������� ����� �� �� � 3 � �1 � �� �� �������� � ���� 7�* ���� ��� �� ������ � 3 � '����� ��$��� ��� ����� ���� � �� � ����� � �� �� ��� ������(6���� ��� � � �3 �� C��� #� �+�� ����� �-� ��� '785:(� 54"55� /��� ����� � ������������ �� �������� ������ ��� ��$���� ������������� �� ?� #� +�O������ ��� 78 ���� ����� �� ��� GJ�����������H ������ �� ��� ���� ���� �����$����� �� ��������� 78 �� =� B� B��� ��� ����� �� ��$������ � 0 �������6 ��� @���� ������$ ��-����� � � ����� ���� ��!-�!�� '!�����"#������ 788�(� =��� ����� ����������� ��������$��� ��� ������ � ������ ������� �� 2���� �� '7*�*(� �:�"�5*� 0�6� � �� ����$�� ���� ���� ���� ��� � � ���� � �� ���� ������� ����������������� ��� ��� �����$�� C� � � 7D ��� ��� ��� �0 ��� C� � � 7D� C� � � 7D�D

�� �� '��� A�� =�( ���� � '�� �� �( ��� �� ��� ���� � ��� ������� ���� ��� �� �M�� ���

���� � ����� ��� ���� � ���� � ���� �� ��� �� �,'����� � 7(���� E '����� � 7(���� E

'������7(����.� @��� �� ���� � ������J� ����E����E���� $�� ��� ��� � � �� � ��� � A� � A� � � =� � =� �� E A� E =� 1 4� ���� �� E �� ���� E ���� ���� � ��� � ����������� ���� � �E7� ��� ����� � '�� ��� 4( �� ���� �� ����� ���� ��� ����� ����� ������� ���� � ����� �� Q� �������� ���� '�� A� =( 1 '�� � 4( ��� ����������� ���� � �� �� '��������������������(�� �� ����� ���� /���F� ����� �� �������

C; � � � � ������� �� �� ���������� ���� ���� ��� ���� ��J� ���F� � ���� � ��Q� �������� ������ � 7 � 7 ������6 ��� ���������� � ���� '��������������(� �������� ���� '��������������(� �� ��� ���� ��J�� ��� 7� � �� ����� �� ��J� 4� �������� ��� �0 ���� ���D

��� ��� � � �3�''�3HLLLLLLLLH(�7(6 ��� ���� '�� � � � ��(� �� ������� ������ �'����'��2��(�� � � � ��(�� /�� ���� ������������ ���� ��� � 4� ��������� ��������� ��� <�����7 � �������� � !���� '�� �������� V �� W(6 � � �����F� �� ������ X� �� Y�

C+� #�� ��� ���� ���� �� ��� ������� ������ �� ��� ���� � !�$��� ��'78� (� ��������� ��� ���F� ��� � ���� ����� ����� ���� � �� � ���������D

��� ��� � � '� � 2�( 3 G� ���� � � ''� G(� '� 3 2G((� ��

� � �� � ��7� �� � ��7� � � '��3'� 2�(( '�3��(� � � '�32�32,�( '�3,�(� CQ����� G�����H ���� ������ �� @� =� +���J ��� -� L� Q�����F� ����� ������ '788*(�D

Page 91: The Art of Computer Programming - Bitwise Tricks and Techniques

<= ������� � �8������ *� �"

�����/!�������0 �� 7����� �� ���,�1��&���� ������0E��������#���-�����&��-,���/���#�(�� ��� �!����� ������� !����!����

�� ������ K� � � ''�� �(3 (F ������ ����� � ����� K� � '�3 �( E �F� '/�� ������������ � ��M������ ��� �� �E� - ��� '�� � :( ���� �E� �� �$��� /������� ������ � �� � �� �� � ��������� ��� ���� �/!� - ����� � �$�� �� ��� ����� ����� �� ��� ��Æ ��� ��� ���� &��� ���� ��������� �� �� �� ��$������ ��(

�� �� �� C�� �D ������ ��� �$����� �� �� '11(� ��� ������� ��� �� �� ������� �� ���������

��� ������� �������� ��$�� ������ ���� �� ���� ���� � � ��C�� �D �� ���P

� � 7

�C�� �D� � � � 3 G� � � '� � 7(� '� � �(�

� � '� 3 �( '� 3 �(� � � '� 3 �( '� 3 �(� � � � � 7�

!��� �� � ����� ����� � � ���� ��� �� ����� ��$���� ��� ��� ����� ���� �� ������$�� ������ *��]�55� B��$��� �� �� 1 7�74 �� �� �$����� $�� ��� �5 ����� ����� �� ���� ���� � ���� ���������� 1 8:��a� �� �� � �� � �� �� �� ������� 8�� �������� � ��� �$����� ���� ��� ��� �� � 7 ]�55 ��� 1 ��5*6 ��� ���������� � ����� � ����� � 1 88�8a� /������� ��� ������� ���� �� ��� � � ������� � �����P

� +!"+ F� +!"+ F3 +!"+

�� +!"+ F� +!"+ F� �< C%??

�� +!"+ $55?J ������ ��$�� �����P

������������ +!"+ E#$#$#$#$#$#$#$#$

���� +!"+ E>#%#$##@#>#%#$#$

�/! �D�D�

�/! 3D����D�

&:) �D�D�

&))G 3D3D�

�/! �D ��D��

G= ��D�

�G� �D3D�

������������G� �D�D3

<9G �� D�� D$

����� ���� ��� &��� � � ����� ���� ��� �������� ������ /�� ���� ���� �� ������������� ' �T( �� ���� ���� ��� �� � ����� � ������������

�� #� ��� �� 1 '�� E ��(��� �� ��� �� '/��� ���� ����� �� @� �� #������ L�������� ��� ��� �������� � E � 1 ''� �(� 7(� '� � �(� ��� ��� ��� ���� ��������(

�� � � � 1 '� � �(� ''2� 3 �(� 7(� 'G;����H ������� � G�������H(

�� '�� (� 1 '�� � 7� ��( �� �5 � ����� �� �� ��� G����H ��� &���� � ��� ������� �� �� ��J�� �� ��� ��� �� '�� � � � ��(�� � '7 � � � 7(�� 1 '�5 ��� � 7(��55� '/��������� � ��� ������ 0 ������ ��� �������� G���H ��� G��H(

�� ������� �� ��� ������ �� ������ � ��$� ��� $�� � ' � � � � � �(��� �������� '3/( ����� �� �1 � �� ��� ��� �� '�� � � � ��(�� � ' � � � � �(�� ��� �� � 7�*�

� Y�� '3/(P /��� �� G 3 ,�,� � ''� � *( E '� � 5 ((. �,� � ''� � 7 ( E '� � :*((. �,�� ''���:(E'��:�((. �,�� ''��4�(E'��4�((.. 1 �� ����� �'�( 1 '�� (3 2��'/���� �* ����� ��� � � �� �� ��� ����� � �/! �� �$�������� � 75 ���� ')�* ��� �/!�(

� � ���� � � �� � � �5 � �2 1 ���7�*�� �� 1 � �� 7�*� �2 1 ���7�*�� �� 1� �� 7�*� /��� C� � � D 1 *2�2�2C�� � �� D+6 ��� ������� ��7�7"7� � !�� C�� � �� D 1C�� E 7��� �� � 7�*D� @��� C� � � D 1 �*2���+�7�*�� ����� � 1 '2� 3 7��( E '� 3 7��(�

�� ����� ���� � 1 G3 *2���+ ��� ��� ������� ���������� ���� � 1 '2�32G(E'�32G(�/��� ��� �� �� ��� �� ������� � 1 G 3 �*�2�2�+� ����� 2� 1 �''2� 3 2G( E '� 3 2G(( 1'� G(� '� 3 2G( �� '01(�

/ ��� � ������� ���� � ���� �� C�� � �� D 1 7�C�� � �� D� �� O �� ���������� � � ���� ���� ��� ��������P � � G 3�*�2��+ 1 G 3 *2��2�+� ����� � 1 '� 3 2G( E '2� 3 2G(�

�� ��� �� � ��H11111111H� �� � ���� � � G3 ,� ''� G(� (.3'�� ''�� G(� (.�� � '��7(�'���(� � � �3,�� ''�� G(� (.� � � '�3H11111111H('�3�(� '�� ������(

�� ��� � � ���� � � '2�32G(E'�32G(� � � G���'�'���((� & � ''��7(�'���((3��� � � � &� ; � � � &� C/��� 7:����� ���� �� ��$��� ������ 8 � �� �� � 1G 3 *2���+� ���� ��� ������� ����� � ����� ��7�� � �$�� ��� ��� ������ �� ���

Page 92: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ <*

�����/�����������#&��-!��������-��������(!�(��&#� ����!��������

����� ����� ���� � � � �� ����� ,� ��� ��� ���� �� ��� �� � � 0 ����� ���$�������P ')�* �D�D�F &))G 3D�D�F <G'G D�D��D

� �� ���� ��� ���� ��� � ��� ����� ����� ������� � �� ��$��� � ��M����� ����� ������6 �� � �� ����� ��� ������� � ���� ���� &� ��� � ��� ��������P�� 1 C�� � 020� �D� �� 1 C�� � 010 �D� �� 1 C�� � 0&0 � 7D� � 1 C� 030D� �� 1C�� 0�0 � 7D� � 1 C� � 0#0� 8D� �� 1 C�� � �55 * D� �� 1 C�� � 080� 4D� !��R #��� �� ��� ��� ��� �� ������ 8 � ��O ����� % � ����� ������� � ��� �� ������P� 1 '080'�55(0#0��010020(�� 1 �� �#######%�%$ 6 � 1 2G 1 �B B B B B B B B 6� 1 2G3�'4'* (8'0�0�7(030'0&0�7(��(�� 1

�B�%4BJ$ #?� B B '��� ������� ��(6% 1 �@###@#####@###@# 6 ��� 2 1 G 1 �@#@#@#@#@#@#@#@# �

���� #� ���� �� 1 ��E��E���7����� ��� &� 1 ��������E7������ ����� �� ��� �� ������ G����H ��� G����H ��� ����� ������ �� ��� �� � '� E � E ' � � � (��( �� ���

��� &� � '� � �( �� ���� /��� �� &�� ��� 1 �� E �� E �� E � 7 ���� ��� &�� 1�� � �� � �� E 7 ���� �� � � � � 7 � �� ��� ��� � �� @��� �� ��� &� ��$� ������� ������� � ������ ��� ����� �� �� �� ���� ������ �� ����� 7�� ��� �� ��$�� 1 ��� '2��� � � � 2��2��(��� & 1 &�� '��� � � � ����(��� /�� ������� �� ����� �������������� ��$��� ��� ������� ��� ��� '7� �������� �� �������� 8 �� � �������(P

�� � � E ' � � � (��� �� � � E ���

� � *2�2����+3 '* � � � **(���

� � �� � � E '� � �(6

&� � � � ��

� � *2��&�+3 '* � � � **(���

& � &� � � E '� � �(�

���� Q� � �������� ��� � � �� �6 �� �������� ��� � � �E �E��@�>�> �$@� ��������� ������ �� � ��� ��� �5 � �: 1 ��@� �5 � � 1 ��>� ��� 554 � 7��� 1� �$@� ;���� ��� ������ ���� � ������� &���� �� �� ����������� � ������� �������� ���� ����� ��������� /�� ��������� ���� �� � ���� �� ���� �� ��������� ���� � ������ ��� ��6 �� �� � ���� ������ �� ��������� ����$�� ��������� ��� �� ��� ������ ��� ���� ���� ���� � ��� &��� ��J��P ��� � � �3�@#@#@#@### �� � '�� 7(� '�� �(� ''�� 75(3 7(� � � � � '�3 ��@�>�> �$@(� C��� ������� � ���2$2" '78�5(� 4::"4: � #�F�� � �� ���� ��� K�F �� K �$@F �� �$���D

���� '�( #� ��� �� ���� � 1 '�� � � � ��(�� ��� � 1 '�� � � � ��(��� ���� � � �� � �� � 56��� ��� �� � �� �� � 1 '�� � � � ��(�� ��� & 1 '&� � � � &�(��� ���� ��������� 1 '�� E ��( �� 5 ��� &� 1 '�� � ��( �� 5� @���F� ��P

� � � E ��

� � '� E 4 ( 3 G�

� � � � ''� � '� � 4(( 3 5 (6

& � � � � E 5 �

� � '& E 4 ( 3 G�

& � & � ''� � '� � 4(( 3 5 (�

@��� 1 '7 � � � 7(�� 1 '����7(�75� G 1 * � '!������ �� � ��������� � ������� �� *�('�( %� � 1 '��� � � � ��(�� ���� ��� �� � �� �� ��� ���� � � �&�� ������P

� � � E 2G�

� � '� 3 2G( E '� 3 2G(�

� � '� �( 3 � 3 G�

� � � E � � '� E '� � �((6

� � '� G(� '� 3 2G(�

� � '� 2�( 3 2� 3 G�

& � � � � E � E '� � �(�

@��� G 1 ': � � � :(� 1 '�� � :(��� '!������ �� 77 ��������� � ������� �� 7��(������� ���� ��� ���� � ���� �� ���� �� ��� �� ��� �� �� � � �������

��������� � ��� �������� � �� ��� �� �������� ���� ��M����� �� �� �� ��������� '��� ����7�4"'��((�

Page 93: The Art of Computer Programming - Bitwise Tricks and Techniques

<< ������� � �8������ *� �"

(�� #���&( (����� &# ��� ���0&#�-�� !�� ��� !�'� �� ���M��(&���0�����-�#� �����������GG��G�����!�0��

���� <�� G ��� �� ��� ������� �� '1*( ��� '11(� !������ �� ����P � � �''�32G(E�(�Q� � �������� ���� ���� 7 ��� ��� ��� ��������P � � '�32 (�7� & � �'�E'�� ((�

���� Z��� �� 78P <�� � 1 '''78�7� :( E 7(� 5( E 7� � 1 '''��88� :( E 7�(� 5( E �*���� � � '� � 5( 3 � '��� ����(� � � �$# 3 �''� '� � 7(( � 5( '��� ���� ����������(� � � �E��3''�������� E �(� '�E�(( '��� ��� ��� ��O ������(� ���� � ''� � � � '� � �(( '� � � � '� � �((( 3 �$###%%# '��� ���� �� ������� ������(�

��� ?������ 8* �������� �� � �� �� �������� ��� ��� ���6 � ������ ���&�������� �� �� ��� �� ��� ���� ������� ��� ��� �� ������ /� � �� �� G��� �������� �� X��H �� �� ����� 5�4�:� Q��� 5�� �� �� �� ���� �� ����� ������� � ��� �������������� !�� � � ���� ����� �� ����� �� ������� 7� C,� ��� ����� ��� � �������� ��� ������ ���� � ��� 7 ������ ; � ��� �� !����� ��� /� @���� �� ���� ���2� !����� �� '788�(� �5"57� �� �������� ���������� � ���� �������D

��� /�� ���� ��� �������� �� K &���� � K ���� ���� Q���� ��� ��J�� &���� ���������� '��(� ��� �� ��� � ��� � ���� ��� '�3�� � � � ��(� �� ��� K���� &���� ������� 1 C&��� � � � �� ��J��D� /��� �� ����� ��� &��� ���� ��� ������� �3���� � � � �� '��(� ��� ��� � ���� � ���� ������&�� ��� ��� �����&��� ��J�� &��� � ��!���� � ����� K ���� � ���� &��� ��� �� �� ���� � �� �� ������ � '�(� Q������ �� ����������� �������� ������� � �� ��� � 'K���������( ������ -� '/�� ��� ��� K 1 :� 1 7 �(

/ �� �� �! ���� � �������� ����� ������ K�� � 7F �� K�� E ��F� ��� ������ ���&��� ���� �� ; � '''� � '� � '� � K((( �� ��(� ' � K(( � 6 ���� ; 3 � �� �! �

���� � +!"+ E@###@###@###@###

�� +!"+ E## # # ����????

$P &:): ID�D�?

<!G 3D�D�%

(<:Q �DID3

Q<:Q ���DID�%

&:): ID�D�>

<!G 3D�D$J

&)) �D���D$J

(<:Q �DID3

(<:Q ���DID�

%P <9G ID�D$J

&))G �D�DI

<9G ID�D�%

&))G �D�DI

�P &:): �D�D��

>P �/! �D�D�

/! ID�D�

<G'G �DID�

/! �D�D�

&:) �D�D�

?P <9G ID�D$?

&))G �D�DI

<9G ID�D�#

&))G �D�DI

JP <!G ID�DJ#

&))G ���D���DI

/�� ���� ���� �5T '��� � ����( �� �� �� �������� �� T �� � ���� ������� ����'.�(� ��� �� '.�( ����F� ����� ��

���� Q� �������� ��� 2 �� ����� � � ���� � �� � ��� � �� �� � � ������ � ��� ���� �� �� &���� � ��J� ���� ���� 2 ��� ���� �� ���� ;76 �������� �� �� �� ��

&���� � ��J� ����������� ���� 2 E 7 ��� ���� �� ���� ;7� �� ������ ��� ����� ��� 2��������� �� ����� ;� ��� ;5� � ��� ���� � ����� ���� �� 5'2( 1 5'�� ��(�

�� � ����� ���� � � � 3 �� ��� ����� !������� ;� '���� ;: � ���� �������� ���� �������� ������&�� �� ���� ������ ���� ���� � ������ ������� � � � ��(

���� <�� 4 1 �� ����� % 1 �� � 2� #� ���� �� 4���� &���� �� ���� �����

��� C������ � �� 4�D ��� � � �3'4� 7(� /��� ��� � � �3 2,� ��� � � � � ��'����'4�7(( �� 2 � � �� Q������ ��� � � '��4(��� C�� � 1 '����� � � � ��(��� �� ��$� � 1 '����� � � � ��(�� � ����� �� 1 '� � 7(�� C� � %D�D

��� C��� � ���������D ��� � � ��'����� � � � ��(�� � ����� �� 1 ,��� �� � � � � %��� �� 1 � � 7 �� % � � � ���

��� C��������D ��� � � '� � ��4( �� 2 � � �� ���� � � � 3 '� � 7(� C%�� 1 7� '� �� 4(� /��� �� ��� ��� ���� ���� ����� ��� �������� ����D

Page 94: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ <?

'���� �� !��� ��0��6���� &��8�����6������ ���6��� ���� ����!������# &���# ���

��� CQ������D ��� � � � '� � ��4( �� � � � � 2� Q������ ��� � � � 3 ',���� ��''� � �( 3 7(( �� % � � � ���

���� /�� ���� ��� ��$���� ��� &���� � 4 ���� ���� ���� �� ��� ������� &��� ������� ������� Q���� � �� ��� � V�� ��� ����7 &����� /��� � 1 ' � � � ����(�� ������ ������������ �� A� ��� ���� G����� ����H �� ������ �������� �7� ���� 4 � � � =� #� ��������$� '�� � 7� ��� �� �1 � ������� ���� 1 �� /�� ���� � � ��� & � ���$��� � ��� ������� � ���� �� �� ������ �� �� � 1 '� � 7( '� � �( � � � '� � =(� ����� ������� &��� ���� � ��������� ��� ����� �����

���� %��� ���� �� A 1 � 3 '� � 7( 3 � � � 3 '� � '= � 7(( 3 �'� � =( ���� �� ��$�� 3 � E A 1 � 3 '� � 7( 3 � � �3 '� � '= � 7((�

�� �� �� ��$� ��� ������ ������ �� 5'7( ������ �� �� ��� ������ ��� ��������&��� ��� � �� =���� � ���� �� 5'7( �����P !���� ��� ��� 1 �= � ��� � ������

��7��� ��$������� � �� ��� � ��� �������� ������ �� �� ���� � ����� � ��� ��� � ��� 7�� ������� ?������ 77� �������� ������� � �� ��� �� 5'�� �� =( ������

���� <�� �� 1 �� ��� 1 ��� ��� ���� � ���� 1 �� �� 7 � � � = �� �����P ���� 1 � � � ��� � �� E������ ��� �� 1 '� � 7(� E 7 ��� ���� 1 �� � ��� ����� �� 1 ������ � 1 �� ��� �� 1 � �� � 1 ��� �� �� 1 � � �� ��� �� 1 '� � 7(� E � ��� '������� �

���( 1

'��3'����/��7(� ��������(� �� �� 1 �E�� ��� �� 1 '��7(�E ��� ��� '����������� � � � � ����(

�� �� ''�� 3 2G( E '�� 3 2G((� ''�� � ��( 3 G(� ����� G 1 ����� !�� �� �� 1 � � �� ���� ������� �� ����� ''�� G(� '�� 3 2G((� ''�� - ��( 3 G(� ������� =� � =�

���� ������ ��� �� 1 ����� � ����� ���� �� 1 ����� � ������ �� 1 #� � ����� ������ 1 �� � ������ ��� �� 1 ����� � #� ���� �� 1 ����� � ��� ����� #� 1 �� ���� �� �� ������ �� ��� �������� #� 1 '�� � � � ��(�� 1 '��� � 7(���'�

� � 7(� /��� ���� ��� ��������� ������ � ��� ��� ���� $�������������� ������ ��� ����������

C%��� ���� �� � 1 ��� �� �� �� ���� ���� � ��� ���� �� �������� � �'�� ��(6���� 5'%( � ����� �������� ���� G0 ����&�����HD

��� '�( � � � 3 '2� � 7( 3 '� � �(� � � � 3 '� E �(� C/��� ������ ��� ���� � ���� ��� �� T� ���� I���� �� 78���D

'�( Q���� &�� �� � '� � 7( 3 2� ��� �� � � 3 '2� � 7(� ��� ���� ��� ����� ����� �F� ����6 ��� ��� ��� 1 �� 3 '�� � 7(� /��� �� � ��� 3 '��� � '�� 3 2,�(( ����4 � ��� 3 '��� � '�� 3 ,�(( ��� ��� ����� ���� ���� ��� ������ �� � ���� ��� �� �$�� ��� ������� �������$���� /�� ������ �� � � �3 '�E '�� 3 2,�( E '�4 3,�((6 �� �� ��������&�� � � � � 3 '� E '�� � '��� 3 ,�(((�

'( /��� ��� �� ���������� �� ������� ��

��� /�� ���� ��� C �� ���� ��&���� �� <���� ! '����� ���� ��� ������� � ������� ��� ����� ������ �� ������$���(� ! ���� ��� �� ��� ��� �� ��� ��� �� �� �� �� ��&��� ��� &���� ����� � ������ ��� � ����� ������� �� ������� �� ��� ��� �� �� �� �� ��&����� � &���� ����� � ����� ���� ������ ��� ��� ��� /�� �������� � ���� ��������� ��� ���� ��� C 1 7'��7(�� ��� � ������ ���� ��� ���� ��&�� �� � ����� ������������ � ��� � �� ��M������ � ;���� �������� � ��� � ����� ��&��� ����� �� ��$�� � ����� ����� � ��� ��0 ��� ������ � � � � @��� C �� ��� ����

�� ������� 775� C �� '�( 77�'����7'� � 7(� � ��(6 '�( 77�'��'��(�7'� � 7(� � ��(�

���� ������������ ��� ������ ���� ��� C �������� � �� ��$���� =��� ������ ��P�� ��&��� � � ���� ���� ��� ������� ���� �'��( 1 ��'�� E 7(� ��� K'�'��(( 1K'�'�� E 7(( 1 �� ����� K'�( 1 � � '� � 7( '��� ?0� ����7�7"'3((�

���� �� � 1 '���� � � � ����(� ��� � � �� � �� �� � � � � � �� ��$�����

��� ���� 1������� '��

�� '2� 3 ��((� /��� �� 1 ������ � ��� � � 7�

Page 95: The Art of Computer Programming - Bitwise Tricks and Techniques

?5 ������� � �8������ *� �"

��������K�-

��$������� ��� ������� ��� ���� �� B� �� I������ ��$�� ���� �� � � �� �� ��� �� ����� � 7 �����P ������� ��� ���� �� �'�( ���� ��� �������� � ��������������� ;������ ��� � ������ � ��� G ����V�H ������� � Y� 1 '���7(C��� D��� � � �7 ����� � �� �� �� ���� � ����� �� ��� ��� � � ���� �� �� � 1 ��� �� � 1� ��� � � ���� ��� � � ��� YF� ����� ��� ���� ��� �� �� ��� �� ��� ���� /����'��( �� �� 1 �'���( �� �� ���� � 1 �'�� � ���(� � �'�( �� �� ��� � ���� � � 7�

�� � � � � � �� � � �� 3 2� 3 '� � 7(� '��� '3/(�(

���� =�������J��� ������� #� ����� ��� ��� � ����� � � ���� �'��� � � � � ��( -�'��� � � � � ��( '�� � ��( �����$�� �� - �� '�� � ��( �� 7 � � � �� �� � � � � �/�� ����� �����&��� ��� �� � ������ � ���� � � $��������� � �� ��� ��

��������������

/�� ������������ �� � ������ � ���� � �� $��������� ������ ��� ���� � '�� �� :�� � � � �� �� :(� � �� ��� ��

��6 ��� � �� /� � ��� ������ �� ��

������ �����

���� '�( �� � ��� � ����� � ������ �A� ����� A 7 �� ��� ��� ����� �������� � ��� ��� ������ � ������ A� ��� �� �� �� �� � � � �� �� 1 �� ����� ���� 1 � ���'��( ��� �� �1 ��� ; ������ �� ������� #� �� � �� ��$� �� �� ���� �� �� �� ���� �� � � � �� �� �� ����

�� ��� ���������� ' � 7(���� ����� ����0 ����� �� - �� '�� � ����(� ����� ��� � � @��� �� 1 �� � ����� ��� �� 1 ��� ���� � ����������

'�( �� 1 ��E��� �� 1 �� � '�� 7(� � 1 �� ��6 � ����� � ������ � ������ ������� $�� � �� 1 '7 E �� E ��� E � � � ( �� ���

���� � ������� �� ����� � � �������6 ;���� �������� ��� �$�� �������6 ���������� ��$� ��� �� ��� �������� /�� ��� ��������� ��� �� �� 1 �� � �� ����� ����$� �� 1 �� E �6 ��� ����� ��� ���� ���� � � �� /��� F��� 1 F���/����/��� ���

�� 3 ��� � ��� 1 ,'�� 3 ����/ � ���/�(� �.3 '�� � 7(�

@��� ���� � ����/����/�� � "� 1 "� �� ��� ����

���� �� � 1 '�3�� � � � ��(�� ��� &��� ���� � 1 �3��'�� � � � �3��(�� �� '0/�(6 ���� � 1'�� � � � �3��(� �� ������� /����� I �� ������� ���� � � �� K� ������� ����� ��������� � � ������ �� �3�� ��� �� �3��� !� ����� �� � ���� � ����������� � ����0 ��� � �

��� K� � ��� ������

���� ��������� � � �� �� 1 �� D� 1 7� �� � � � � ������ ��� 7� � �� #��� ��$������ � �E7� �� ��� ����� ����� ��� �� =� � =� $ =� �� ������ ��&�� �$ 1 ��� $ ��� ����� � �� /�� ���� =� � =� Æ =� ��� =� � � ��� ��������

�� ��� ����� ����� ��� ������� ���� =� � =� � ��&�� �$ 1 �$�� ��� ��� F� 1 � � D$�� ��� � ����� F� 1 D$ � F�� <�� D$ �� ��� ������ � F� ��� F�6 ����� ��D$ 1 F�� %��� ���� D$ � D$���� �� ���� ����

�� ��� ����� ����� ��� �� =� � =��=�� ��� Q 1 � � D$�� �3���� �� �� � �1 ��� ��� 4 � ����� ��� ��� ���� Q � ��� �� � �$�����# � <�� F/ 1 � � D$���Q ��� 1 �� �� � � � ��� F� 1 D$�� � Q ���/�(� F/� <���� ; ����� � ���� �� ���

"�� E7 � �������E7 � ��� ���� F/ ��� �������� <�� D$ �� ��� �������6 ��� �� �� �� F/�

��&�� �$ 1 ��� � �� �� � �� �� ���� ��� D$ � 'D$�� � �$�����# (�'�������E 7(�

��������� �� =� � E C=� �� ��D � E C=� �� ��D � =�� ��� Q 1 � � D$�� � 3 ���� � � � �1 � �� ��� 4 � ����� ��� F% 1 � � D$�� � Q ��� �� �� 1 ����� � � � � ��� ;� <���� ;� �� ��� "�� � ��

����� � ��� ���� F% ��� �������6 ���D$ 1 F% �� ��� �������� / ����� =� �� E C�D� ��&�� �$ 1 �$��� ��� � ��6 � ���� =� ���E C�D� ��� �� � � ��� � � �$ 1 �%�� �� ��� �� ��&���� �������� ��� �$ �� ��� ����� ��������� E C�D� �� ��� ���� D$ � 'D$�� � �$���(���

����� �� � ������ ������

Page 96: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ ?

��, �����:%���� �������Æ' ����# �������&����%6�� ��������% ���(#�8�����((�������' '����0 ���

�� � � � �� ���� �� � �� ���� =� 1 ��� /�� ����� �� ���� ��� ��� Q 1 � � D$ � 3 ������ � � � �1 � �� ��� 4 � ���� ��� ��J� Q � ��� �� � �$���# ���� D$ � Q � ��

��������� �$���# ����� � ��� 3 ����� � 7� �� � D$ � Q�� /�

�������� � D$ � Q ���� ��$� ��� ���� $�� � � �� 1 ��� 3 ����� � 7��C/�� ���� ���� � �� ������� �$�� �� �� ���� ��� -!B � ���� ���������

�����

���� ������� ����� � ��� ������ � '=�� � � � � =�( �� ���� ��D

��� ����� �� �� ������ 7�:� � � ���� D� 1 C� � � �3(� ����������� ���� ��� ���� ������������� ��� ���� Q ���� ����� ���� � � ���� D$ � �3����'��� �($6 �� ���������� ��� � ��M����� ����� ����� ���� �� ��

� ���� �� �� ��� �� ���� � ���� � � ���'G E 7(�� /�� ��� � /����� I������ � ��� A ���� �� 3 ��� � ��� ����������� � �3 ���� � ��� �� @��� ��� �������������� � <���� ; ���� ���� �� ����� � �� ��� ��

��� � ��2����� ��M����� $�� ����� �$��� ������� � ��� ���� ���� � 3 ���� � ��� � 4 � �$�� ����0 ����� =� 1 ���

�� �� ��� ���� $�� � � �� �� �� ��� ��2������3�2 $�� �� � �� ; � ��2������3�2

�� ���� ���� D$� �� '0/�(�

��� B� �� I������ ��� ������ � ������� '� � ��M�����( �O�� ��P Q� �$��� ��������� ���� � ��������� ������� ��������� ����� �� � '������� � ��( ������� � ����'� 1 � E 7 � � ���� ��� ���� ��� �� �� ���� �! �

���� Y�� ������� 77� � �� �� C'7� ''�(( 3 � �1�D �� � � ������ ������ �� '/�������� ��� '� 1 ��� ��� ���� � �� ������� �����������(

���� /�� ������ ���� � �� W'�� ��( ����� ��� /����� -� ��� �� �� 1''�� � 7( ���� �� 1 � 3 � � 7�

�� � %�� ���� ��� � � ������ � ���� �� �� �������� �� �������� 4 ��� 77��

���� �� ��� ������ �� G��H ��� ����� � 0 ����� ���� �$��%�� � � ������ �������

���� /��� ������ ��� � ������ G��������&��� ������H ������� 9�:;-I. 1 �� -�������� � �� ��� $����� ������� ����� ��������6 K �� �� � ��� � ������

#P 9)/G �DID���� 7 � � 9�:;-I.�<"= �D� 7 � � ��

$P 9)/G �D�D���� � � &!(<-�.�'Q �D>* �� �C�D 1 N

%P 9)/G KD�D��� � K � =� -�.�9)/G �D�D���� � � � :"�=-�.�9)/G �DKD���� � � � 9�:;-K.� ':Q �D�* � �� K � N

<=/G KDID���� �� 9�:;-I. � K�<=/G �DKD���� �� 9�:;-K. � ��<"= IDK �� I � K�

�P ':Q �D%' � <� � ��>P 9)/G �D�D���� � � 9�:;-�.�

(� G �D�D� �� � �1 �N ':Q �D$' ����� � �� ��

���� '�( #� ������ ��$� :'D( � L��' � 1 �'D(� !�� �0 ����� ���� �� ��� ��� ���� � �'��( �� ��� � � D ��� �� � D �

'�( #�F$� ��$�� ���� :'D( � �'D(6 ���� � � D � !�� �� � � � �� ��$� �$ � ���� ��� � � D � /������� �'� ( � :'� (�

'( I���� '�( ��� '�( ��$� ���� ��� �������� � #� ��������� ��� ��0 ���'�( �� � � & ���� �3�� � &3�� ��� �3� � &3�6 � �� �� ��� �������� ����

������� �������� /�� ������� �������� ��� ������������ ��0 ������ '������ ����������( �������� �� � ������ ����� � � ����� ������� ��� '!������� 5����-(�

#� ��� �� ���� ;� � � � ; �� � ������� � 4 ������� ����� � ���� �� ;� 1 ���� ; �� 1 �� � 7� /�� �������� � #�

��� ������ ��������� �� ������� ;� � � � ;�� ���

� ��� �� � ������ ���� �� ��� �������� � #�� �

��� C��������J��D /�������� �� �� 1 �� � 7� ,�������� ��� & � ��� � � 7� � � ��

Page 97: The Art of Computer Programming - Bitwise Tricks and Techniques

?! ������� � �8������ *� �"

�7K�-8�� 0���!�'�!�( �������� ����0�� 8��� ��&(!Q������&�����H��(����&���������#�!�����#����������-���������Q������T��������� �����!�������!�(!����!�(!��������� ��������

��� CI������� � &�D #���� ;� 3 & 1 �� ��� � � � E 7� #���� ;� 3 & �1 �� ���� � � � 7� /��� �� � �� � � B46 �������� ���� ;� � ;� � ��� � � � E 7�� � � � 7� ��� ������ ���� �����

��� C����� ;� � � � ;��D ��� � �� � � 4 E 7� #���� � � �� � � �� ���� > ����� 1 ;� ��� ��� � � � E 7�

��� C������ ������� ���������D ��� � � � #���� � � 4� ��� � � � E 7�;� � ;�� ��� � � � E 7�

� �� ���� > ��� ����� $�������� �� �� � �� ��� &� �� ����������� ������� ��� ��� ��� �� 1 �3 �� ��� ��� 1 �3 �� ��������� ���� �� ���� ��� ����� �������� �� �� �� ������ ��� ���� ������� ;� � � � ; � � ��� ����� �����

��� C?������ ���D ��� ; � � 3 �� ��� A � 4� �� ; 1 �� � � >:�

��� C�� �� ��������ND �� A � �� � � >4� ,�������� �� ; 3 ;� 1 ;� � � >��,�������� �� ;3;� 1 ;�� � � >:� ,�������� ��� A � A�7 ��� ������ >��

��� C/������$��� ���� ���D ��� � � ��7 ��� ;� � ;� B���� $��V� ���� � � � E 7� ,�������� � � >��

��� CI������ �� ���D ��� = � � ��� ;��� � ��

�� C-��$� �����������D #���� ; ;� �1 ;� ��� A � A� 7� #���� ; ;� 1 ;���� = � = E 7� /��� �� A � =� � � > 6 �������� ��� ;� � ;�� ;� � ��A � A � 7� = � = � 7� ��� ������ ���� �����

�� C-���� ��D ��� ;� � ; ��� � � A� /�������� ��� � �� ���� �� ; 1 ��

��� C?������ ����D ��� ; � � 3 2&� �� ; 1 ;� �� ��� A �� ��� ����� 7 � A � ��� ������� ,�������� ��� � E 7 ��� ;� � ;�

�� ������ ���� �������� ������� 0 ��� ����6 �� �������� ���� �� �� ������� � ���* � * 0 ��� ����� '������� �"7�8(� �� &��� ��� 47� ������� ��0 �� ����� ��� 5��*4���� � �� ������ ���� 48� ���� � �������� �� &��� ��� 7�7** ������������������ ���� � ���� ���� ����� ����� �� � � ��������� ���� 75�8� ����6����� ��� �������$��� '��*� 87�� �:5 � 8�( � � ���� � ��J�� '5� � �� *(� ��� ���� ��� 8���� � �� ���� � ��� ����� 0 ���� �������

7�(�$��"�� %� L������ ��� -� ������"��������-�� �����+ '#����� 78�7(� !�������� 5� B��� ���� ��������� �� ������� ������� ��0 �� ��$� ��� ���� � ������������ �� �������� #� A����� 2� !���* � '78 *(� �48"�:�� � '78 8(� �56 �� ;����� L� A������ 2$2" � '78�4(� 5�5"5��6 �� /� ������� B� ���� @� !������� ����� ���������� ��2%"/ '78��(� 5�5"57�6 ?� < ������ 2� !��� ��� "���� =���

$ �� '78*4(� 5*4"5*86 +� �� L����� B� Z���������� ��� �� @� I���������� � ����/-� ,����� �� '78**(� 778"7�4� ��� ��� ������� 5"�4�

���� '�( !� ����������� ��� �� � ��0 � � >6 � �������� >� '�( ! $����� $�� ����� �������� � �� ����������� ���6 � �������� >� ���� �������� ��� �� ���

���� � �� ��� � �� �7� � �� 77 �� ��� &��� ������� � ���� ���

��� /�� ���� ������� ��� ������P &'����( 1 2��2��6 ''����( 1 ����6 '����( 1 �����!�� ���� ) ���� 1 '�� % ��('�� � ��(� ����� �� 1 �� � �� ��� �� 1 �� � ���

��� '�( ������� ��� ���� �T�� ��� �T/ ��� ��$� ��� ���� � �� :� � �� ��� ���� ����� �� 1 ��%��%'�����(� �� 1 ��%�� ��� �� ��� ������� '�� �� �( �� '��� �7� 77(� ���� �� �� ���� �� �� ��� ������� '�� �� �( �� '��� �7� 7!( � ���� �T/� C/��� ��������� �0 �$����� � ��� ����� �������� ���� � 1 �� � 1 7� ��� � ������ �� G��� ���� 7�HD

'�( /�� �������� ������� �� �� ��� � ������� ���� �� ���� ��� ��� ������ ���T�� ��� T�6 ��� ���� ������ � �� � � �� � �� ��� *� ,�� ������ �� ���� �� ����

Page 98: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ ?"

���0�# ������� ��������E���(����(�!E�(���,����������0��

'�� �� �( �� '��� �7� 7�(� �� �� 1 &� � 2��� �� 1 &� � 2��� ����� �� 1 �� � ��� �� 1 �� � ���&� 1 �� � ��� ��� &� 1 �� � ��� C��� ������� ��7��" �� ���� ��$�� ��� ���� ������ � ����� �� � ��� /�� ����� �� ���� �� ��$� '� E � E �( �� 4 1 � �� ���� ������ � �'� E � � �( �� 4 1 � �� ���� ��6 ��� �� � �� �� �0 �$����� � �������� /�� ������������� � 1 � Æ � �� ���� ��� �� ��� �� ��������J�� �� ��� ��� ���� ��� ��������'�� �� �( ��� ��� ��� ���� � ��� ��M�����6 �� � �� �� �������� � ����� �� ���� ��� ����� �?/� �� �� ��� ��� ������ ������� � �������� ���� ���� ��� R � ������������ ��M��� ��� ��� ���$��� �������� � Æ � 1 � � � Æ � 1 ��D

'( ��� 4 �� ����$�� ��� ���� ���� �P <�� '�� �� �( �� '��� �7� 7�( ��� �� 1'�� % ��( � ��� �� 1 2�� � ���

���� �� ���� � 1 '� E 7( 3 � ���� '�� �� �( �� '��� �7� 7�(� C��F� � ����$�� ��������D

���� /�� �������� ��� ���� � ��� � ��� ��0 ���� ��� �� ����� � �� ��������������� � � �� �

� � �� � �� � �

����

�� � �� � �� � �

�6

��� ��� �� � �� ���� T�� � � ��� ��� ��� '4� �( ��� '�� 4( �� ������ � ��� ���

�� � /�� �� ����� � �� �� ����������� �0 �$����� � ������� 74 '�(6 � ��� ��� ���������������� '000( ����� Q�� ������ ���� ������������� ��� �� �� �� ��� ������� 1 �� � ��� ��� 1 �� � ���

���� #��� ������������� '000(� &��� �� � �� ������ ������ � �� �� '����(� 1�� E �� E �� ��� '����(� 1 �� E �� E �� �� 5E 5 1 7� ������ %� ��� G������ �������H����� ���� �� � �� �� ��� � � ������� � ����� � '��� ��� ��� ��( �� ������ ����� �����P �� 1 �� � 2��� �� 1 �� � 2��6 �� 1 �� � ��� �� 1 �� � ��� � 1 �� � ����� 1 �� � ��� &� 1 � � 2��� &� 1 �� � 2��� C�� ���� ����� ���� �ND

���� � ���� ��F$� �� ��� ���� � 1 ���� � � � ����� ��� � 1 ���� � � � ����� � � ����

� 1 C417 � 41� � 4 �� � � � � ������� Y��� � ����� �� �� ������ �� ���D�

� 1 C4 �� � � � � ������� Y��� � ����� �� �� ��� ���� �� ���D�

�� ��� ������� � 1 D� � �� Q� �������� ���� � 1 1 � �� ��$� � 1 �777 ���� 1 ����� /��� 4 4 � � ��� � 1 7� 1 D�� � � � � D��6 ��� D��� 1 ��� 4 4 ���� � 1 7�� '%��� ���� � 1 7 ���� 4 1 D��� E D��( /�� ������� ������ ��������������� ������$� ����� �������P � E 7� � � D�� ���

'�� � � � ������ �� � � � �����( � ,'�� � � � ����� � �� � � � ����( 3 �� � � � ������

'�� � � � ����� 3 �� � � � ����( �� � � � �����.�

����� � 1 � 1 � �� �D��� � 4 � �D� � ��� ����� ���� � ���� �����������C��� B� �� # �������� ��� �� '78�7(� �7�"��:6 2� !��� �� &!�'� ���+

'78�7(� �:8"�5�� /���� ������� � � ������ ���� ���� &��� ��&��� �� �� Y��� ����$" �����= '78 :(� 4:*� ��$� ��X�� � ���� �������� �� ���� ������ /�� ����D�� ������� � �$���� � � ������� 1 74�5�6 �� �������� D�������� 1 ���4�77����� D�������� 1 5:��5�4:8� Q ��������� +� #� #���� ��� ����$�� ���������� ������� � ����� ��� 0 ���������� G� �����H ���� ������ ��M�� �� � ������� � ������������� 1 �7� �7 � ��� ������ �� L � B������ ��� ��� � ��� �� D� � :�������������� ���� ��� ������� ��� D��D��� ��� � ������� D����� 1 44��5�:�7 ���D������ 1 44��57�4�6 ��� �������� ��� D� � D��� 1 7 ���������� �� ��� ����D� � �� 4� :� :*�� ������� ����� ���� ���� � 77� 7:� ��� 7 ��$� ��$�� ���� ����$���D

Page 99: The Art of Computer Programming - Bitwise Tricks and Techniques

?- ������� � �8������ *� �"

���9�%������#�/!���(# (���� ���7��( �� ���

���� !������� ? �� ���� ������� ������� ��� ������� �������� � � � ���P'�( � �� ��� !� �� � ��$�� � � �� �� '��( =�$�� � ��� ��� ���� �� � � ��� '���( =�$��� ��� ��� �� �� � 2 �� '�� �� ������(� ,������� '�( �� ������ ���� �������� �������6���F� ��� ���� � ��� ���� ������ � ������ ������� '003(� '0)+(� '0)�( ���� ������ '��( ��� '���(� � ���� � 1 �� � 1 7� � 1 !6 ��� �������� ������� � ��� 7 ��������� �� ���� ��� ������� ������ �� ���� �T�� �T/� T�� ��� T/�

Q� ��� ������������������ ������� '�� 7� !( �� '��� �7� 7�(� ���� ������ ����� �� ��� �� �� ����� �� � �� �� �� �7�!7��!77�!!!!! �� ��� ������� 'Q� ��������� � ! ��� ! �� 7� /�� !� �� ���� �� �� ����� ��� ��F������ �� ��� � ��� ��� 77�(/�� ������ � ����� ��7�� ���� � ���� ��� ������� � � � ����� ��$� �� 46�� �������� � � �� �� ��� ��� �� ''� � ��( �( 3 2�� 1 �� Q �������� ��� ����� �� 2 �� 1 ��� ������ �� ��� ��� �� '� 1 7� ����� � 1 '� � ��( 3 �'� � ��(� !�� �� �������� ��� 1 '� � � � ��( 3 �'� � ��(� ��� 1 '� ��( 3 2�� C/�� �������� ��� ��� ��� ���� ��� �� ���� � ���� �� B� !� ;�� �� �� /-� $2" &��� 2��� �� '78 *(� �:7"�5��D

; � ���� ��� ���� � ������� ���� '�� 7� !( �� '�7� 7�� ��(� /��� � � �� �� ��� ����� '2��3���( '2��3���( 1 �6 �2�� 1 ��� ������ �� ��� ��� �� '� 1 7 ����� � 1 �3�� � 1 �� ����� 1 �� ���6 ��� ���� 1 � � �� ���� 1 � � �� #� ��$� �� �������� �� ��� ����� ������ ������ � ���� �� ���������� �� �� ����� ���� ���� ����� ����������

������� �T�� T�� ��� T/ � �� � � �� ��� �������� ����� �T/ ��� ��� ������� � ���� ��� �� �����

���� �'�( 1 ''�3��(�7�(''��7�(3��(''�3��(�75(''��75(3��(''�3�(�7�( ''� � 7�( 3 �( ''� 3 ��(� ( ''� � ( 3 ��(� ����� �� 1 �B B B B B B ��� 1 � � � � � � � � � 1 �� � � � � � � � �� 1 � � � � � � � � � C���� ���������� 2���� � ��� �� "�� ��� "�-����� ������ �� I���� #� Q��� '78��(� ���� 58�Q�$� ����� � � � �� �� �'�( � ���� '� � �/! �������� ��� �� /!(� �����'�( 1 A � � � A� A� � � � A ���� A 1 �>#�#?#%@$>#�#?#% ��� A� 1 �%#$#@@>>%%$$#@#> �D

���� %�� � � '� � 7(� ����� � 1 � 3���

��� �� ����� ��� ������ � ��� ���� ��� � 7 �� ������ G�

��� ;� '0+�( �� ���� � ��� ���� -'� 3��( 1 � ���� � ��� � � � � � � E����/�� ������� ��� �� ����� ��� '+.( ��� �� � � �� � � E ����

���� '�( 7&� 1 H&� 1 �� �&� 1 7� ��� ��� :� 1 \� �� 7 � � � �'�( � ���� 1 ���E� � �E��� ����� 2� � � � 2$ � �� ��� ��� � 1 ���E� � �E���

�� � � � � �� /��� 7&� 1 � ��� H&� 1 �&� 1 � �� ��� � � � �� !�� : � 1 &������ 7 � � � �� ����� &� 1 \6 ��� ���� :� 1 \�

���� Z��� �� 7�� 1 �7����� 7�� 1 �7�7��� 7�� 1 �7�7�7� 7�� 1 �7�77�� 7� 1 �7�777�H� 1 �7�777� H�� 1 �7�7��� H�� 1 �77���� H�� 1 �7����� ��� H�� 1 7������

�� � #� ��� �� ���� (P�9)-&. 1 <�'-&. 1 &!":=-&. 1 \ ��������� �� ��� $������ &'��� ���� & 1 \(� ��� ���� ����� �� �� ����� �� ��� �� $������

��� CB��� ������ ������ �����D Q� ��� � ��� ��� � � & '������� & 1 \(� ���<�'-�.� (P�9)-&.� (P�9)-&.� �� &!":=-�.� &� '��� ������� ��4�4" �(

��� C;���� &��� ���$������D ��� � � (P�9)-\.� � �� ��� -� � �7�

��� C��� �� H �� ��� ���� ����D ��� � E 7� 7� � � : � \� ���- � 7E-'�7(� �� (P�9)-�. �1 \� ��� � � (P�9)-�. ��� ������ ���� ����6�������� ��� H� � �

��� C��� �� : � ����� ��D ��� :H� � &!":=-�.� /��� �� <�'-�. �1 \� ���� � <�'-�. ��� ��� �� � �46 �������� ��� � � &!":=-�.�

Page 100: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ ?;

��7��( �� ������������� ��P��((!���0��%��%( � !���!�!( �%��%�0�� !���!�!���(# (���� ���&�-���(#��"������������! � ��

�� C��� �� H �� ��� ���� ����D �� � �1 \� ��� G � -' 3 �7�(� ���� H� �'' � G( 7(� G� ��� � ��� � �:�

�� C;���� ���� ���$������D ��� � � (P�9)-\.� -� � -� H\ � �\ � ��

��� C��� �� �� �������D ��� �� � �' &!":=-�.( 'H� 3 �H�(� /��� ��(P�9)-�. �1 \� ��� � � (P�9)-�. ��� ������ ���� �����

��� C����� � � ���$�����D �� <�'-�. �1 \� ��� � � <�'-�. ��� � � ���,�������� ��� � � &!":=-�.� ��� ������ ���� �* �� � �1 \�

��� #� ��� ��� �� ���� ��� �������� !� ��� �������� �� ��������� ���� �� ����������� '!� � �(� /�� ������ ������ ����� ����� ���� �� � ������ ��� � ��� G��������������H ����� �� �� L��� T ������� C2$2" �� '78*�(� ��8"�48D� ��� ��� ������� �����'�� �( �� ��� ������� ��� ������ � � ��� �� ������� ��� ������� � ��� ��$����� � ��� �������� ��� ���� � � � ���� !� �� � ������������ ����� � � !� � � � !�

� !� �� � ������������ ����� � � !� � � � !��/�� �������� � ��� �������� ������ ��� ��� ������� ������������ �����

���� �� ���� � ��� � � ������ ������ ���� ��M������� � ��� ���� �� 7� � � � � �� ������� ����� ���� (P�9)-&. 1 <�'-&. 1 &!":=-&. 1 � �� � � & � � ��� ��� \ 1 ��!�� �� ���� !� � !� �� 7 � � � � ��� � � � ��� � ��� ������� ����� �� & 1 � � 7� � � � � 7P ��� � � �6 ���� ����� !& � !$ ��� � � � ��� � � &!":=-�.� �� � �1 ����� <�'-&. � <�'-�.� <�'-�. � �� &!":=-�. � &� (P�9)-&. � �6 �������� ��������� <�'-&. � (P�9)-�.� !�� ��� (P�9)-�. � &� &!":=-&. � �� � � &�

����� � ���� ���� �� ����� ��� ���� ��� ���� � ���� /�� � ����� ���� �� 5'(���� �� ��� ������� � � &!":=-�. �� �������� �� ��� �� �� ��� ��� �� C/������ ��� � ��� � ��� � ��� ����� ����� � 0 ��� ������ � ��� ������� ��������� ������ ��� ���$���� �� @� %� =���� L� <� ;������� ��� -� ?� /��O�����%2 � '78*:(� 74�"74*� �� ��� � ������� ��� ������� ��������D

��� Q� ��� & ���� � ������� ��� � � � � ��� ��&�� ��� ��� ��0 ��� �'&( 1 & ��� 1 �6 �'&( 1 &�'��( �� � 1 76 ��� �'&( 1 �'��(& � � � &�'��( �� � 7� '����0 �����& ������� ������ ���'��7� 7( ����� �� �'&(�( �� ����� ��� � ����� �� ��� ������ ���� ����� � � � � ��� ����� ��� ��� ��� ��0 ��� �'��(\ � � � \�'��( 1 F� � � � F � '/�� ������� ���� ��0 ��� ���� ������� � ( � ��( <�� !� �� ��� ����� � ��� F� � �� 7 �� � ( � ����� \ ��� ����� �� 'Q� �������� ������ ��� ����� '0�0(� � � ��� ���������� Z � $ ��� �� ������� ��� C� /��� F� � � � F� 1 #J!>[$X$Z\"VP\C��� !� � � � !� 1 �474:�4�4�7�4�7�( /�� ������� ��� ������ � � ��� &� ����� 1 F� ��� & 1 F� � �� ���� F������ �� ��� ����� ����� � 0 ��� ������� C��� L� Q�������� T� @� �� ,�-�!� &��� �� 2� � �-�� ��� '��� (� 4 ":*�D

��� ���� T7 &��� ��� ��$�� ��$� ���� �� ��� �� ��$� ���� ���� ����� � ��� ������ �������� '��� ������� 7:*�( ���� T� �������� G� �� ��������� � ��� ��$�� ��������� ��$� � ��� ������� � � ��� �� ��$�� - �� ���� ��F� '������ �� � 1 �(��� H� �1 H�� ���� T: &��� ��� ����� ��$�� ���� �F� ������� ���� ����� � ��$�� G6���� �� ���� ��� ����� ������ U� �� ���� H U� 1 H� '� U� 1 \(� Q������ �� T5�������� ����� � ���� � U� � U� �� �� ������ � ��� �����

��� /��� ������ ��� �� ����� � �� ���� ����� �7 E �� E � � �E �� 1 � � '� ���� � �������� ������� �� '�0(� C@��� � �� �$��� %�$������ ����� ���� ����� �� �� &��-

#!��� � 2� !���* �� '���4(� �4*"� ��D

��� /�� ���� ����� ��&�� 4 Æ�4 Æ�8�Æ ���������� ��� � ���� ���� � ������� ������Æ ������ �� ��� $������ /���� �������� ���� ��� �������� ����� �� � � � ������� � � � ���� ���� �� ��� $������

Page 101: The Art of Computer Programming - Bitwise Tricks and Techniques

?= ������� � �8������ *� �"

&���-�� �����:%���� �����!����!�0�� !������ ��&������ ��!& �#��!:%���� �����!�0�� !�������0 7��(�

�� ,����$� &��� ���� � � '��(��) � I�� E I� E I� E � � � 1 7� ���� ����� ��� ���� ��$� 7�� ,����$� ���� ���� J��I - I�� '�� � 7(� �� ������� 7���*"77� %���� J��IE� � �EJ��I� Q� �������� ':I( �� 7 1 I�EI��6 '��I( �� 7 1 I��EI���

/��� ��� ���� ��� ��$�� ��� ����������� ��� �� �('�(I� 1 �('��(�

�� '�( ����� ���� � � �� ��� ���� � ����� �� �� ���� � � J���� �� � � �� ���� � '� � 7( 7� ��� ����� � E J� � ��� � � � � �6 ���� ��� � � � E '7 � �(�� � � E J���6 ������� ,�������� �� � 7� ��� � � � 3 ��� ��� ����� � � J� � � ���� � � � �6 ���� ��� � � � E '7� �(� � � � � J���6 ������� ,�������� ��� � � � E ���� ��������� ���� � 1 '�(��

'�( /�� �������� �� � ��� �� � ���� �� � ���� E ��� �� � ���� � ��

�� �� �� 1 ('�� � � � ��( ��� �� 1 ('�� � � � ���(� C+�� � �$� ������� ���� ��('�� � � � ��( ��0 ��� W'( �����ND

��� /�� ���� ��� �$� � ����� �� ��� �� ���� ��$�$��� '��(� Q� ���� �� ��$�(''��(��(1 ('���( E J���� �� ��� � � �� ��� �� ������������ ��$��G�����H�� ��� ������ '; � ��� ����� � ��� �� (''�E(��(1 ('���(EJ���� ��� � � ����(

��� ������������ �����&�� ��� � ��� '���(E 1 ��7� '�7�(E 1 '�E(��� '�7(E 1'�E(�� �� �� �� ����$�� ���� ��� ����� �������� � ��� ������� � 1 '�(� �� �������� � � '� � 7(� � � � 3�'� E 7(� � � '� �( E 7�

+����������� � � ��J�� ����� �� ��� ��Æ ��� �� �����&�� '�7���(� 1��'7�(�� '�7�����(� 1 �'�7(���6 ���� �� ������� � �� ���� �� �� ��� �� ������ ����� Z�� ��� �������� � Æ�� �� �� ���� �� �P � � � � 7� � � � 3 2��; � � 3 ,�� � � � � ; E ';

�� '� � ;((�

� � ;������ ��� Q����� � ���� ������ '0��( ��� ��� ����Q����� � ���� ������� '0�*(� �����F� ��� �� �� 8�% ��""� �)�%�$ ������P ���+ ������ ����*� � -��

'� =����� !��1!��+ �� ��� ��

� 1 J�� E J�� E � � �E J�� � ����� � 33 � 33 � � � 33 � ��� �� ���

=�$�� � ����Q����� �� �� ��� ������� ������� ����� ���� �$���� � 1 '�(� �� 1 'H(� � � 1 'O(�� ����� H �� ��� �� ����� ���� ('�( 1 J 'H( ��� O �� ����������� ����� ���� J 'H( 1 J 'O�(P �� � � 3 ,�� �� � � � ��6 % � �� � ��6� � % ��� � � � 3 �'� � 7(6 � � '% 3 2,�( � � � ''� 3 ��( � 7(6 � � '� E 7( � 76; � � � ':,�(6 � � ; 3�';E7(6 � � � � '� 3 '� � '';E7(� 7(((�

����������� ����Q����� ��� �� �������������� ������� ��� ���������� ���

J���� E � � �E J���� 1 '�7(�'J���� E � � �E J����(� �� ��� �������� ��

Q� �������� �� ('�( � � ��� ����� ��$� ���� �$��� � 1 '��(� � � 1 'H(�� �����J ''H � �(�( 1 �('�(� Q �������� H �� ��� �� �� �� ����Q����� � �� ��� ����� �� �� ��� �� �� �� ����Q����� H�� ���� � 1 H �� �� ��� ('�( ��

% &���� ����� ���� ���� � ��� ���� ���� �� ������� �� ��� �� ��� Q������� 7�� �������� � ����Q����� 7���� ���� � �� ��� '7�(���7 ���� � �� �$���; � �� O �� � �������� Q����� ����� �� �� �� �� � 1 'H(� ��� � 1 'O(� ��������� � � � � 7� � � � 3 '� � 7( 3 2,�� � � � � � E C� �1�D''� � 7( 3 ,�(� !�� ������� ����� ��$� ���� �� �� �� ��� H�� /�� $����� � ����� ���� �� �$������ ����Q����� ��� ���� ���� �� � ���� �� O� �� �� ������ ��$�������

��� /�� ����F� � ��� ��� �� ���� ��������P /��� �� �� ��� ��&�� ��� ���������� ��� �������� <�� � ���� ���� ���� � � 1 �6 ��� 1 �6 '��(5� 1 ��� '�7(54 1 �76'���(� 1 ���� '�7�(�5 1 �7�� '�7(�� 1 �76 '��(44 1 ��� '�7�7(44 1 �7�7�

Page 102: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ ?*

&�������#(����#�&�(�� �(����� ��( �(��K�����&����%6�� �������(H�K�

'�7��7(44 1 �7��7� '����7(45 1 ����7� /��� � ��� �������� ��$�� ���� ��� ���������� % ����� � ��� �������� ��� ��$� � �������� �������� ��� ���������� �� ��� ���� � ��� ����� ������� %� '%�� ��� �������� �E 1 ''��(�(� 7�( Q �������� ����������� ������� �������� ���� �� ����� � �������� ��� �$� ���� ����������� �� ����� � ������ $�� ��� �� ��� � '0.+(�

��� Z��� �� �� ���������� ��� �� ��� � ��� ����� ��� ��&��� �� ��� ��� � � ����������� '/�� �������� "������$ ���� �� ������6 � � �� ��O���� ������ ���(

��� ��F� �$������ � $��� ��� �������� ����� ��� �� ������ ������� ������� ��� ����� � ��� ���� ��������� 4� �� /��� ��� G�������������H ���� ��������� ������� � ��� ������� ������� ���� $��������������� �� � �������� ���� �� ���� �������������� ��� ����� ��7 1 �

��� 1 =� ��� 5� 1 � ��&�� � 4 Æ�:5Æ�8�Æ �������� �� =� 1 I E

�I� ?$���

�������� !"# ��� ����� �������� #"!�� !#"�� ��� "!# �� ��������� G��V�����H �� � ��� ����� �� � ��� ������ ����� ��� ��V���� �� � �� 1 =� �� � � � � 1 = �� � � � � �

� '�� E ��( 1 �� �� � ��� �� 1 =��'�� $ =� � �(�

��

��

��

��

��

��

��

����

��

��

��

��

��

/�� ������� � �� '� � ��(�'� � 2��( ����� ��� ���� ��������� ��� ��� ��� ����6���� �� 1 �

�'�

I � 7�I('7 E 5����( ��� ������ ������� ���� �� ��������� -���������V����� � ��� ������� ��������� ���� ��������&��� ����� ���� ������� ��������� ������� ��$������� ���� ���� � Q��� 7:� / ��� O �� ��� �������� '���� � ��� ���� �����(��� �� ����� ���� O �� ��� ������ ��� ��� ������ ��V����� �� � ��� ������ ���

��� '/��� &� �� �� �� ����� �� �� ������� 7 �� �������� ���� $������ ���� ��O�� ���� ����� ����� �=� �=U� ��� �=U�� ����� =� 1 �

�'7E

��(':��

��� ( ��� U 1 2�����

Y���� � ������ ��$���� �� <� ����V� �� 7*5�� �� �� �� �������� �� ��� ��&���� ���������� ���������� 4� *�� ������� ���� ����� ��������� ���� �� �$��� $�����6 ��� ����V�F����������� "���������-�� $'�����!�*�� � '785�(� �7�� ���������� ��� ��������� ������ ������ � ������� 75: ��$� ����V� ������ 5� :� ��� 5� 5�� �������$����(��� /�� ������� ��&����� ��0 ���� ��� �� ������ �$�� �� �� �� �� �� ������P

�����'�( 1 � 3�'L� 3 L 3 L�(� L 1 �� 3 � 3 ���

; � ��� ���� ����� �� ���������� '0.*( �� ���� �� ��� �� � �������� �������� ������� ������ /�� ������ ������ ����� ���� ��� ��� ��� ��� 785� ��&����� ������ �������$�� ��� �� ��F� �������� ������ ���� ��� ����� ���$��� ��������� �������� �� ���$��� ���J������ � $��������� '/�� ��� ����������� ��� � F�� ����(

�� /�� &��� ����� ���� �� ��� G ���H ����� � ��� ������� ���� ������� Q��������������� ����� ��� ����� ����������� Q� �������� �������� ���� Q��� 75'�( �� ���

� � � � � � � � �

�� � 7�� � 7�� ������� �$��� ���� ����������� ��������� ������� �� ��J���� ���������'+�� � �$� ������� E � ( ������ ���� � � � � �����N(

�� �� � 1 ����'�(� ��� � � � ��� �������� � �E'��7(E'��7(E'��7(E'� �7(

�� �� ��� :E( E �E E �( � ���� �� �� �� ��� : �� ��� ��� � ��� �������� ��� ����� 7 �� ��� ��O���� ����� /��� � � �� ��� &$� ����� ��� � ���� � ���� �������@��� �'E� (( � �

E( E �E E �

( � ��$������ �� ��� �'E� (( � �E( � �

��

Page 103: The Art of Computer Programming - Bitwise Tricks and Techniques

?< ������� � �8������ *� �"

��!������0 ��0����( ��� �(( ����,����(�������0 !����������(��!����-�#��#���E�T�����(��

������� ��� ����� �� �� � ��� � �� � �� ���� ����� '� E ��( �� 5 1 �� '/��������� �� �0 �$����� � &����� � ����� � ��������� ��� � ��� E � ( �����(

��� '�( #��� 7� ����� �� �� ���� � � ���� ����� ��� ����� � �� ������ '��� ��7��"')+(( � ���� '����(� 1 ��� E �� E ���� '���(� 1 �� E ��� '���(� 1 ��� E �� E ������� '����(� 1 �� E �� E ��� /��� � 1 ��'��� �� �� ��(� '� % ��(� ����� ��� ��������� ���� �� ����� ��$�� �������� �� Q��� 8 �� ����� ��7��� C/��� �� ��� �� ������ ����� � #� Q� B��� ��� +� �������D

'�( =�$�� �� 1 ��$����� � 1 �

�$�� � ��� �� 1 �

�$����� �� �� � � �� 3 �� '1 �(�

� � ����� '1 ��(� � � ���� % � ��7 '1 ��(� � � ��7 '1 ��(� 2 � ��%� � � �3%�� � � 3 2� � � � � '1 ��(� 2 � � � 2 '1 ��(� � � � 3 �� � � � �� � � � � 7 '1 �(�� � � � 7 '1 ��(� % � � 3 �� � � � �� � � � 3 � � � � � � � � � % � � � � � ��� � � � � '1 ��'��� �� �� ��((� 2 � 2 �� � � � 3 2�

CQ� �������� � ������� � ��� O�� ��� ������� � <���� ��� ���� � ��� ������� / ���� ������ �� �� ��� ������ ��� B����� =������� )�����. ,��� ��� %���

"��������-�� $�!������� '78*4(� �������� ��"��6 ?� -� ;��������� L� @� ��������� -� A� = �� )�����* )�+� � '!� A� I������ ���:(� ������� �5�D

' ��� �-�� � ��� � �������� �������� ����������� ��� �� �������

� � � !������������ ���� �������������� ���� � �����

' ������ ������ �� ����� �� ����� �� �� ������

� ��,� ,� �����3� $&**&" *# (�"*%� ��"��&" �(�")/ ����

��� /�� ������� ��������� ���� ��� � � ���� ��������� ��� �� ��� ��� �� ����������� �$�� ���� E 1 7 � ( 1 7� �� ����� ��� �� � �� ����� ��� �� ��������� ������ ��� � �������� ��$� � ��$��� �� '0.1(P

��� C<� � ��D + ���� �� �� � 1 7� �� � � � � ( �6 ���� � � �5�

��� C<� � ��D ��� � � !������� �� � !��� ��� !�� � ��� /��� ����������� �4 ��� �: �� � 1 �� 7� � � � � E � 7�

��� CB$� ����D ��� �� � �� � � ��� ��� �� � !������� '%� � 1 !��� ����� ���� ��� ����� $�� � � !�������( ��� �� ��� ������� � ���� $�� ��� � �'�� � 7� ��� �� � 7� � � 7� �� � � 7� �� � 7� ��� �� � 7(�

��� CY����� !���D ��� �� � !������ 3 ��� � � � 3 '���� � 7(� !������ ��� E '� � ' � �((� !�� � � E '�� � ' � �((�

�� C#��� �� ���D Q� � � � � E � ��� � � !�� 3 �������� !�� � � E'!�� � %(� ��� !�� � !��E'�� %(� ����� % 1 7E '( � 7( �� '� �(�

C!� E � ( �� � �� �0 �$����� � �� 'E � 7( � '( � 7( ����� � �� ���� �� J������ ���� ���� ���� '0.*( ��� '0.3( ��� �$�� '0�0(� Q� ������� 7�4 �� �� ���� ��'E � �(� '( � �( ����� ���� �� ������� �� �� ��� ��� � ��� � J���� ; � <��������� '������� 7 �( �� ��� ���� � � ��6 ���� ��F� ������ �� �&��� � � �� ��D

� � �� 0 ���� ����� ��� � ������� ���� ������ � ������� ;�������� �� ������*� ��� ���$��� �������J�� � � ������ ����� ��� � ��� � ���Æ ������ ��� �������������� ��������� ������� ���� ����� ����� ����� '� �� ���� ��� ��� ��$�(�

���� �� E � � ��� ( � �� ��� &��� ���� ������ � ��� �� �� ��� ��� ��������� ��� /��� �� E � 4 ��� ( � 4� ��� ���� ���� ������ � ��� ���� �� ��� ���������� � ��� � �� ������� ��F�� ���� ����� � 1 ���'E� (( � 7 ����� ���� � �������� � � �� � ���� ������P /�� &��� ���� ���� ��� ���� ���� � ���� ��� ��������� ���� ��� ��� &��� ����� � ��� ��$� ���� ��� � J��� /�� � ����� ���� �������� ������ �� ��� '����� ��$�( �����

Page 104: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ ??

���(�����P�� E#������,�(0��#�

���� #��� � '0�/(P �� � ��� 3 2��� �� � �� 3 2���� � � �� 3 2��� �� � ��� 3 2���� � � ��� �� � �� 3 2�� �� � �� 3 2���� �� � �� 3 2���� �� � �� ������� � �� 3 ��� ��� � ��� ��� ��� � �� 3 ���� �� � �� 3 2��� ��� � �� 3 ����� � ��3 ���� ��� � ��� 3 ��� ��� � �� ���� ��� � ���3 ���� ��� � ���3 2������� � �� ���� ��� � ��� ��� ��� � ��� 3 2���� �� � ��� 3 ���� ��� � ��� ����K � �� ���� #��� '0�/(� ��� �� � ��� 3 2�� ��� ���$� �$�������� ���� ��� �����

���� /�� ��������� ���F� 0 ��� �� �6 ������ ��� ������� ��������P

/�� K�F ��� K@F �� ��� ���� ��� ���� ������ ��� �������� ���� ����� ����� ����� O������ ���� ������� �� 8�Æ �� ���� � ��M������ /�� ���� �� �������� ��� ������� 0 ���� ��V ��� � ���������� ��V����� /�� ������ ������� ����������� ����$��� ���� ������ �� �� ����������6 ��� � ��� ���� ������ �� �� ���$�� ���� �������� ��� � ���� � ����� /�� &��� ��������� �� � ���� ��� �������� �� ��������� � ������� 7 � ���� ������� &��� ���� � '0�/(� �� ���� ��� ���� ��� ������� �� ��� ������������� ; � ���� '0�/( ����F�� ������� ������������

���� '�( �� � ��� L ��� ����� � 3 L �� ����6 �� � ��� L ��� ���� � L ������ /�� ������ ��������� ������ Q �������� �** 1 �*� ��� �� �* �� ����6��������� �++ 1 �+� '�� ��� �� ��$� �+ 1 �'��(*� ��� �� ��� ��&������ ��� � ���������� �� �������� ���� ���� ������( %� �*+ � �*� � �*+* � �** 1 �*�+ ����� �+ � �+*+� #� �� �� ���� �����F� � ����� � �� ���� � ���� ��� ��P�*+*+ 1 '�*+*(+ � �*+ � '�*(+*+ 1 �*+*+�

'�( #� ��$� �* 1 '� �� ��� ��(3'� �� ��� ��(3'� �� ��� ��(3'� �� ��� ��(� Q ��������� �� ������ ���� ������ 7 �'�(� ���� � ���� �� ���� ��� ��� ��� �� ��� �� �� ��� ������� �����P � � � '��7( ''�� '���7((3'�� '�� � 7(((� � � � 3 '� � 7(� C/��� ������ ��������� ����� � +� -� Q ���D

/ ��� �+� O �� ���������� ��� 3� Q� � ����� ��� ����� ��� �� T�� #����� +� ?� A� ��� -���� �������-/�-#- '������� Y��$�� 78�8(� 75"4 �D

���� /��������������� ������� ����� ��� ���� �� ���� �� -� B��� ����� �����>�-�� 2� !�� �-���-� �� '788�(� 7":7�

��� /���� ��� �5 �� ��� ������ �E 4 �� ��� ����� 7E7 �� ��� ����� : �� ��� ���� ���7 �� ��� ������ �������� 4�� '!�� ����� ������ ��� ������ �������� � ��� ����� ���(

��� '�( �� & ���F� �������� ����� ��� ����� ���� ���� � ������� ��������� � �������� � ������� & ��� �� >�

'�( /����F� � $����� ;� � >� ��O���� � ��� $����� � (� � (&� 'Q � �����('( Z��� �� ���� �� ��&����� '0�0(� �� ������ ��$� ��'&�( � ��'�( <�� ( �

&� 1 & &� � (&�� �� &� �� ��� ���� ������� � ��� ��� �� ���� �������� � > � ��� � >6 ���� ������� �� ��O���� � �$��� $����� � ( �

�� � ( �&� � ! �������

��� ���� ������� ���� &� 1 ���� �� &� 1 ����� �����F� � ������ �� �� � >� ,����������� � >� ��� � >� ��� ������ ��� � > � ��� � >6 ���� ( �

�� � ( �&� �� ������ �� >�

Q������ �� &� 1 ����� ��� ��� �� ���� �� ��� � >6 �������� �� � > ��� &� � >�'�( =�$�� � �����$��� ������ # � >� ���� & � # ��� &� � �'&(� ��� # � �� ���

������ � >� ���� ������ &�� /��� ������ # � �� ���� ��&���� �� '�( ��� '�(�=�$�� � ������ # � � >�� ���� &� � # � ��� & � ��'&�(� ��� # �� ��� ������ �> ���� ������ &� /��� ������ # �� �����$��� ��� ���� ��&���� �� '( ��� '�(�Q������� ��� ���������� # � # � �� ��������

Page 105: The Art of Computer Programming - Bitwise Tricks and Techniques

55 ������� � �8������ *� �"

��(�0�� �������(�0�� ������0+ � �(�� �0 ��������������� ������(# (���� �����(� (������&( ���( �������

���� %� ��� $������ � > ��� ��� �&��� ������� ��O���� ���� ���� ��� $ . ����������� �� ��&�� (����� 1 '�� �(� '��7� �(� '�� �E7(�� !�� ����� ���� ���� � ������ 7� �� � �������� ��������� � ������� ���������� ������� ��� �����$��� �������� > ��� ��� ������� � >��

���� ,����$� ���� �� ��O���� ��� � ��� �� ������ � ��� ���� $�� � ��� ���������������� ��� �� ���� ��� ������ �������

�� � /�� ������ � ��� �� �� � � � � �� �� G� ������� �����H �� � ��0 ��� ��������� � 1 �� � �� � � � � � ����� 1 ( E� � ���� �� 1 � �� � � C�� � � ��(� C�� � � �(�� � � � C��� � � �����( ��� �� 1 7 �� � � C�� � � ��( � � � � � C����� � � ���(� '/�� � ���� �� �� ��� �� ����� � �� ��������� ����� �� ��� ������� %��� ���� ��� ����� �������� �� 1 ��� 1 � �� ��������� ��� ����(

/�� �������� ���� ��� � ���&�� ������ ���� �� 1 ��� � '� �� �( ��� � � � ��E7� Q� �������� ��� ���� �� � ��� �������� �� ��� '��� ��� �� ��� �( 1'5� *� �4� �5� 4�(6 �� ���� �� '��� ��� �� ��� �( 1 '8� 7 � :5� 5�� 4( �������� /�� ����� ������ ����� � �� � ��O���� ��� ��� ������ ��O���� �� ��� ��� �� ��� ���������������$��� C�� � � ����( ��� C�� � � ����( $������ ��� ������ ��� ���� ������ ���������J�� ���� ���� � �� � ��O���� ��� ��� �������� ��O����� /� � ��� ���&�������� ����� ��&�� ��� ���� '��� ������� 7�*(�

#� ���� � � ������ ������ ���� � �������� ����� ��� ��� ��� ��$����&����P (P�9)� <�'� ��� &!":= '���� �����(6 )/!�&:= '� �� ��� ���� � ��� ������� ��������F� ������ � ��� ����� ��(6 P"�! '� ��� ���� ��� ������� ���� ��(6 !/Z ���(/9 '����� � ��� &��� �����(6 ��� &!"& '��� ���� � ���� � ������ �� ��� ������(�

/�� �������� ���$����� ��� ���� �� � )%�� $��$ '��� ������� ��4�7"7*(� ��������� � ������� ' � �(� ����� � 1 ���� �� ���$����� ��� &��� ����� � 1 &!":=- .

���� �� ���$����� ��� ���� ����� /�� � ���� � ' � �( �� 'M� M�( 1 ����' � �(����������� �� �����P �� 1 � ��� (P�9)- . �1 \� ���� M � M� � (P�9)- .6 ��������M � ��� M� � &!":=-M.� �� �1 � ��� <�'- . �1 \� ���� M � M� � <�'- .6�������� M � &!":=- . ��� M� � &!":=-M.�

#��� ����� ��� � ���� � ��� ��� ���� ���� ��$� �E7 ����� �� ����� �������� ��� ������ � ��$� ���� �������� B��$��� ��� ������ ������� ��� � � � � �����

� ��� � ��� ���$����� ' �� ��(� � � � � ' �����

�����( ��� �������� ��� ������� �

��� ����� ��� �� ������������ ����� Q� �������� �� '0�+( �� ��$� � 1 56 ���' ��� � � � �

���( ���� �������$��� � # � ' � $ � ' � # � ( � # � & � % � & � # �

��� C��������J��D ��� � � 7� !//= � 9/(-:/)"-#..� (P�9)-!//=. � <�'-!//=. � &!":=-!//=. � )/!�&:=-!//=. � P"�!-!//=. � \6 ��� !/Z-!//=. �(/9-!//=. � �� &!"&-!//=. � ( E �� 4 � �� �� � �� � �� �� � �( E 4�

��� C��� � � ��� ���D /�������� �� 4 E � ,�������� ��� �� � �� �� � 1 7� ��� � � � ���� �� 1 �(E46 ���� ��� ���� � �� �� � G�������H ��� 4 � 4E7� �� 4 E� ��� �� � �( E 46 �������� ��� ��� � � � � ����� �� ��� ���&�� � ������������� � �� 4 �� ��� ���� ��$�� '/��� ������ �� �� ������� ������� ���� � ��� � � ����6 ��� '�+(�( ��� � � � � 7 ��� � � � !//=�

��� C=���� � ���� �F��D �� ���� � �� � � � �8� ,�������� ��� 'M� M�( �����' � �(� '!� !�( � ����'M� M�(� ��� � � � ����� ����� � '�:� �5� � � ��(������ �� �CM �1 M� D E C! �1 !� D 1 '�� 7� �� 4(�

��� C���� ��D '%� M 1 M� �� � ���� � �� ��� ! 1 !��� ��� &��� ���� � M�� %�� M���� ������ � ���� � �� � � �� ���� �� ������� �� ��� ������� � !�( !����! ��� � '��� ����(� ��� (P�9)-M. � <�'-!. ��� M� � (P�9)-!.� �� M� �1 \�

Page 106: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ 5

���F��� ! � M�� ��� ����� ! �1 \ ��� &!":=-!. � �� !� � !� ! � <�'-!.6 ����<�'-!.�M� M�M�� ��� (P�9)- .�M �� 1 �� <�'- .�M �� �1 �� = � �*�

�� C���� 7�D '%� ������ M 1 ! �� � �� ���� �� � 1 !��( �� 1 �� ���(P�9)- . � <�'-M.6 �������� ��� <�'- . � <�'-M.� ��� ! � )/!�&:=-!�.�/��� �� ! 1 \� ��� )/!�&:=-!�. � <�'-M. � M6 �������� <�'-M. � <�'-!.

��� <�'-!. � M� = � �*�

�� C���� ��D '%� M� �� ��� ������ � ��� � ��� !� ?����� 1 � �� ��������� � �� ��� ���� ���� � ��( !���� ! ��� � '��� ����(� ��� <�'- �. � <�'-!.

��� ! � (P�9)-!.� �� 1 �� ��� (P�9)- . � !6 �������� <�'- . � !�#���� ! �1 \� ��� &!":=-!. � � ��� ! � <�'-!.� = � �*�

��� C���� 4�D '%�� � 1 M �� ��� ���� ���� � M� 1 !� ���� �� � ���� � !��(!���� � ��� !� '��� ����(� �� 1 �� ��� � !� ,�������� ��� � �(P�9)- �.� ��� ����� � �1 \ ��� &!":=- �. � !�� � � <�'- �.6 ������ <�'- . � <�'-M�. ��� <�'-M�. � (P�9)-M.� �� M 1 (P�9)-!.� ���(P�9)-!. � \� ,�������� ��� ! � (P�9)-!.� ���� ! � <�'-!. ����<�'-!. 1 M� ���� <�'-!. � \� Q������ ��� � � !��

��� C!�$��� ��D ��� � � � E � ��� ��� �� � ���� �4�

� � CY����� ��� �����D ��� &!"&- �. � &!"&- �. E ����� � �������� /��� ���� � �� �� �� 1 �( E 4�

���� C=���� � ���� ��D �� ���� � ��� � � �77� ,�������� ��� M � 9/(-:/)"-�..��� � � � E 7� ��� &!":=-M. � �� )/!�&:=-M. � P"�!-M. � \6 ���!/Z-M. � 4� (/9-M. � ������ &!"&-M. � ������� � ������ �� 1 �� ���<�'-M. � (P�9)- . ��� (P�9)- . � M6 �������� ��� <�'-M. � <�'- . ���<�'- . � M� Q������ ��� � M� � � � E �� ��� ��� �� � �4�

���� CB$� ��D ��� � � � E 7� � � � E 7� ' � �( � ����' � �(� ��� � � �4�

/ G����� ��� MH ����� � � ��� ������� ������P �� '!/Z- .� (/9- .( �� �������� '!/Z-M.� (/9-M.(� ��� '!/Z-M.� (/9-M.( � '!/Z- .� (/9- .(� ��� &!"&-M. �&!"&- . E &!"&-M.� �� )/!�&:=-M. 1 \� ��� )/!�&:=-M. � )/!�&:=- .6 �������� ��)/!�&:=- . �1 \� ���� <�'-)/!�&:=- .. � <�'-)/!�&:=-M..� Q������� ��� P"�!- . �M� '/�� P"�! ����� �� �� ��� � � ���� ���� � �������� ��� &��� ������ ���� ������ %��� ���� ��� &!":= ����� � ������ ���� ��� �� ���� � � �����(

C! ������� �������� ��� ��$�� �� -� A� < �J �� 2� � #� �� '78*�(� � �"� 8�D

���� <�� J '�� �( 1 �� � �� E74 ��� �'�� �( 1 J '� � ��� � � �

�( 1 �� � �� � �E � E74�

!���� !������� / � ������J� ��� �������� ��� 'B� M( 1 '� � �( � 'B�� M�( 1 '���74(6

���� � 1 � � � 1 �� �� 1 �� �� 1 :� /�� ��� ����� ����� ��� '� � �(��� '�5� �(���'�5� (���'�:� (���'�:� 5(���'�4� 5(���'�4� :(���� � ����'�� :(� /��� ����� �� ��������� B 1 �� M 1

�74� B� 1 � M� 1 �� � 1 �� � 1 :� �� 1 � �� 1 �6 ��� ���� ����� ���

� �� '�� ��$���� ����(� � � ���� ������� � ���������

���� � ���$��� �� ����� 'B� M( ����� J 'B� M( 1 � � J"'B� M( 1 �� ������ �� ��� ������� � �'�'�M E %(�'��(� M E �

�( 1 �� B 1 �'�M E %(�'��( � �

�� � ��� ���� ��� �

�'B E ����'�B E 2(�'��(( 1 �� M 1 �'�B E 2(�'��(� �

��� �� ���� ������

���� ;� ��� ��� � �� � � E �� � �� �������� �� �������� ��� ��� �� � ���� �� �� #� ��� ��� '���( ���� 'B� M( ���� �� ��� �� � � �

�� B � � E �

����

� � �� � M � � E �

� � ��� ��� '��( ���� ��� �$� ���$��� ��������� �� �� �$�� ���'B� M( � 'B�� M�(� �� � �� �������� ���� ��� �� �� ��� ���� '�� �

�� �� �

�(���'�� �

�� �E �

�(

� '� � ��� � E �

�(���'�E �

�� � E �

�(� /�� ������ ���� �� ��� ��� �� J '� � �

�� � E �

�( � ��

��� �� ��� �$� ��F� �������� ���� ���� ���� ���� �� � �� !�� J '� � �� � � E �

� ( ��

Page 107: The Art of Computer Programming - Bitwise Tricks and Techniques

5! ������� � �8������ *� �"

�������������!�����UV�6'�%����������(��8����

��� $�� � �'�� � E 7( ���� �� ������ �� ���� /4� ��� �� � ��� ��������J���� �� ���� /7�'#� ��� �� ���� ��� �$� ����F� � ���"��� ��� �� '� � �

�� � E �

�(� �� ���������

������ ��� ��� � ���� J ������ ��� ������(

���� <�� ��'�� �( 1 �7 � �'�� �(� /�� ��� ���� �� ���� �'�� �( � � �� ��� ��� ����'�� �( � �� '� �� ��� ��� �������� ����� ��� ���� �������� ��������� ���� ���� ����� ��� $�� �� � �� ��� � �� ��M����� ������(

���� Q��� � �����$� ������� G � ���� % 1 'M � M�(G ��� 2 1 'B� � B(G ��� �������� ���%E2 �� �$��� /��� ���� � !������� / ���� � 1 �BE �

��� � 1 �ME �

��� �� 1 �B�E �

���

�� 1 �M� E ���� ��� �'�� �( 1 %'� � �

�( E 2'� � �

�( E � � �����

� 1 �'M�B � B�M(G� � C% � ��� 'M�B � B�M(G �� �� �������D�

'/�� K% �F ���� ��� ��� ���� ��� ������ �������� ����� ��� 'B�� M�( ��� � 'B� M(� ������$� �������� ��� ���� �����6 ��� ������� 7*4�( ����� /7 ��� / "/8 ���� � �������� ���� ���� ���� �� ��� ������� ���� ��� �� 1 % ��� � 1 2 ��� �������

'Q� =� ����� C2$2" '78 4(� 7 7� :5�D ��� L� ?� ;�������� C��" �+�����

#!��� � '78 5(� �5"4�D ��$� ������� ���������� � � ���� ������� ����� ����������(

��� '�( "'S( 1 �� E �S'�� � ��( E 5'S�(6 "'7� S( 1 �� � �S'�� � ��( E 5'S�(�'�( ?$��� ���� � �'��� ��� ��( �� � �$�� �������� � ��� ��� ��� ���'( ,�$� ��� �� �� ���� '7� �(� E �'7� �(� E �� 1 7�'�( /�� ������� ������ ����� ��� '�(� ,��������� �� '(� �� ���� ���

������ ��� ��� �� 1 � ��� �� � ��� 1 7� ����� �� 1 �� E ��� ��� �� �1 �� �� ������� ��� ����� ��� � ��� ������� :� 1 '����(

� E :�������'�( %�� ���� "'�6( 1 '7��(��E��'7��(''7�6(��E6��(E��"'6( �� � � � � 7�

C�� %� ;�������bc� ����� �� "�'��� ��� � � � � ��6 �( 1�

���

�'7 � �(������� ��

�'��-����\?� @��4 �� � ��������-��� � '��-����� '�( �� '787�(� 7"��D

��� #� �� ��� �� ���� �� 1 '��� ��(� �� 1 '��� ��(� ��� �� 1 '��� ��(� ����� ����������� ��� '���( &�������� � ����� ����������� �� 7 ���� �������� ��$���� �� 4��

�� ��� ��� ��� �� ��� �������� �� ��� ����� � ������� 7*: � ���� � ������������ ��� �� � ��� '�� �� ����F� ��� ������� �� ��� ��� ��� ���� ����� ���� ���� ����� �� ����� ��� ��������� 8���� �� � &����� ���������( /��� ��� �� �� ������ �� $ 1 ���� E ���� E ���� � ���� � ���� � ���� 1 ��

,�������� ��� ����� '�� �( � �'��� ��� ��( ������� J '�� �( 1 �� �����

J '�� �( 1 ,'� � ��('�� � ��� E ��(� '� � ��('�� � ��� E ��(.�

� :$''�� � ��('� � ��(� '�� � ��('� � ��((

��� $ �� ��&��� ��$�� #� � ������ �� 4�� � ����� ������� ������6 ���� ���������� ��� �� ��� � ����� 7� �� $ � �� � ������� ������ '�$( � !������� / ��� �����$��������� ������� '��� ������� 7*4�(

/�� �������� ������ '��( ���� �� ��� ��� �� '�� � ��('�� � ��( � ���'�� � ��('�� � ��( �� �� ��������� �� �� �� ��� �� ����� � ������� 7*5'�(� ����� �'��� ��� ��( ��� �� ��� ����� ����� � ��0 ����6 �� �������� �������6 1 '�� � ��(�'�� � ��� E ��( ���� ����$� �������� �� �� '! ������ � ����� ������� � � ���� ���� &��� ���� ���������� � � ��� �� ����� �� �� �������� ��� � � ��� ���� ��� � ��0 ���� ��� ��&������ ������(

� ���� #��� ��� ��� ��� �� ��� ���� ��� ����� � ������� ��� ������ ����� ������ ������� 7*5'�( ���� 6 1 �

� �� ���0 ��� �� ��� ������� � ������ �� �� ����F���� �� � ������ ��� ������ ���� ��� ������� ��� ���� ��0 ���� ���� G �����������H $��� � G���������� ��H �� ��� ���� 78*��� ���� A������ ��� � �� �0 ����

Page 108: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ 5"

���#��RF������,���������'%0��� �(0����!��&&# �������� ��(���((������(�#�&�(��&�0%������������������������,��!�0���/!�G����&�����(6

�� ��� ���� ����� � ����� ����&���� �� ��� /� �/��� ��� ������ ��� �� ������ �� ������J�� � �������� /�� ������ ������ ����$�� ������� V��������� ���� �� ;S�J��� ������� C��� +� ?� A� ��� �� ���� 0 ��� /*�� '!�����"#������78* (D� � � �� ��� �� � ����� �������� ����� ! ������ ���� G������������ ��������H�� ��� ��� ����� �� �$�� ���� ���$��� ��$����� � ���0 ����� �� L�� @���C$2" ����� � �� ��-� '788�(� � �"���D� T� ���� I���� ����� �� " ��" �-���������� ��� ��� � ������ ������� �0 ���� ��� ;S�J��� ���� �� 2� !�� �� ��-�

� 4 'L �� 78*5(� 757"758� ��� ������ �������� �� �� ��������� ��� �������� ������ �� �������� ���� ���� ��0 ��� ����� ������������ ����� ��� ���� ����� �����0 ����6 � ��������� ���� �� �� ������� �� !������� /�

���� /�� ������� ���������� ������ ��� ��� ���� � �:**��9/( )��� <������

'�=�& 9/( LN�1:�@

���� +!"+ L

+!&A�& 9/( LN�1:�J>

+=&' 'A=" %??D%?%D%>4D%>JD%>�

'A=" %>#D%�JD%��D%�#D%%B

'A=" %%>D%%$D%$BD%$>D%$$

'A=" %#@D%#>D%#$D$4@D$4>

'A=" $4$D$@@D$@>D$@$D$B@

'A=" $B>D$B$D$JBD$J>D$J#

'A=" $?BD$?�D$?#D$>JD$>%

'A=" $�4D$�?D$�$D$%@D$%>

'A=" $%#D$$JD$$%D$#@D$#>

'A=" $##D4JD4%D@@D@>

'A=" B4DB?DB#DJJDJ$

'A=" ?JD?%D>JD>$D�J

'A=" �#D%>D$@D$#D#

����� /(=& '�=�& +!&A�&

���� +!"+ :@

�$ +!"+ E>###$####>###$##

�% +!"+ E%#$######%#$####

�� +!"+ E#@#>#%#$########

��$ +!"+ E����������������

��% +!"+ E# # # # # # # #

� +!"+ E@#@#@#@#@#@#@#@#

���� +!"+ +=&'E@#

9/( E$##

����+��� 9)& 3D+!&A�&

9)/ �D�����

#P <"= �D:�J>

$P <"= �D� ! ���� '��� ����(<"= �D@

%P 9)/G �D����D�

�/! �D�$D�

<G'G �D�D� '%������ � ��(�/! �D�%D�

&:) �D�D��$

&))G �D�D� '%��������� � ��(�/! �D��D�

&:) �D�D��%

&))G �D�D� ';������� � ��(&))G �D�D�

�:(9 �D:�@ B$� � ���� ���<G' �D�D$

':Q �D%' -����� * �������P <!G �D�D?J

9)'G �D����D�

<9G �D�D@

<='G �D3D#

�:(9 3D$

': �D�' '/�� ����(<G' �D�D����

<G' �D�D$

':Q �D$' <� � � �����:(9 �DB1:�@ <� � �� �� ': �D#' � * ����

C�������� �� %��� @ ��F� ������� ��� � ��� ��� � � �������� �������$������� ��������� ��� ������� � ��� $� � 2� !�� /*�����* �� 788�"788*�D

���� �� ��� ��� � ��� ������ ��� '��� ��� � � � � ��(� � ��� ������� �������� ��� 1 �� 7� � � � � 5P Q� ��� � � � ���� � � � � : ��� �3 �� 1 �� ��� � 1 �E �� ��� ������'�( ��� � � '�� � '�� � ��(( 3 ,���� �� � �� � �� �� � �� � '� � ��(6 � '�( ���� � ��3 2,���� � � �� 3,���� �� � ''�����(3 2,���( �� �� � ''�� ���(3,���( ��

C/�� ���� ���� �� � �������� ����� � �������� �� ��������� �� �� �� �������5"7�� ����� �� ��� ������� ���� ����� ���� �/! ��� �G� �� �� ������� ��5� ��� ����9)=G]<==G ���� � 1 5� ��� <� L� = ���� ��� L� ���&� $2" �����-���� � �� ��-�

Page 109: The Art of Computer Programming - Bitwise Tricks and Techniques

5- ������� � �8������ *� �"

(�- &������������ �����������0����( ������(���������� ��(#��!��(��&#��7 ��(#��!��(

� '78*�(� ��:"���� ������������ /����� I ��� ������ 5: ��� ���� W' ��(�������� � ���� � ����� ��� ������ � �������� �� � ��� ������� !� ������������� ����� ���0 ��� ������������ ����� �������� �� ������ M ���� � ��� ������������������� ����������� ��� ������� �� ��� ����� ��� ��������� ����D

�� � '�( #� � �� ��$� ���� 1 �'��( � ���� �� � � 7� ����� �� 1 � � � � � ����'�( 1 ''� � 7( 3 7 � � � 7(� � � '� � 7(� /�� �������� � ��� ���� �� �� ���������� ������ ������ �� ��� ��� �� ���� � �� ����� ���� �������� J���

'�( /� �� /�� ������ ������ � ������ ������� ��� �� ��� 1 ������� � ������� �������� � ������� � ����� ��� 1 � �� � 1 � � � 1 � E 7 � � 1 � � � 1 E 7� �� ��������� '���( ��� '���( ������� ���� ������� � ��� '���( ���� ��� 1 ��� � ��� �

'( /�� ���� ���� � ������� �������� � ��� ��� ���� ������ ��� &��� ����J���� '�� ���( ��� ��� � ��� ���� ������ ��� &��� ����J�� � �� '�� ���( �� �������!�� ���� � ������� ���������� ��� ������ ������� ��� �� ��� ������� � ��� ���� ����� � �� � � �� � J��� �� ��� ��]���� � ����]����� ��V���� � ��� ��������Q� �������� �� ����� �� J��� ���� ������� 1 ������� �� 7 � � � � � ���

'�( �������� ���� � ��$�� $��� �� ��� ���� ��� � �� �� '�( ���� ������ ���� �� �� ���� ���� 1 � � � � �� I��P #� � �� ��$� '�� � ����( 1 '��� ����( �� ��� � �� � � � ���� �� ��� �������� ��������� �� � � �� ��� ��$� '����� ��( 1 '����� ��(���� �� ���� 1 �'��( � ���� 1 �'��( � ���� 1 ����� /������� ��� &��� ������������ ������ ���� � �� �� � J���� Q �������� �� ��$� �� 1 ���� �� � � � � �6���� ��� &��� ����J�� �� ���� �� ���� � �� � � 7 � ���� 7�

-�� ��� � � � � �� ���� ��� � ������ ������� ����� ����� �� � � �� � ��� /������� � � � � � ��� �� ��� ��� �� � E 7 �� � ��$��� � E 7 ��� �� ��� ��� �������� � � � �� '� �$��( � ����� � � � ��� '� ��(� ����� �E 7 1 ' E 7(�'� E 7(�

'�( /��� �������� $��� ��� �� ��$� ��� ��� �������� �� '�(�

� �� '�( /�� ����� �� ��� ��� � � � �� ��� ��� �� ��� ������ �� ������� � ������

� � � � � �

'�( <�� ��� ������ ������ ���� � � � ��� ������� � ��� �������� �� E ��� E� � � E ����

��� ��� ��� � 1 ���E7E�� /��� �� 1 � � � � � �������� � J�'�(6�� 1 7� � � � � �������� � J�'�(6 ��� �� ��� ��� �� �������� � J�'�(� ��� E 7 ��� �� �� Q� �������� ���� ( 1 �� ��$� �� 1 77���7 � 7 E � E �

��� �� ��� �� '�� E 7( 1 �� ���

'( !����� ��� ��� � ��

'�( /�� �������� �� ��� ���� ���� �� ��� ��� � �� ��� �� �� �� ������ �� ����� � 1 7 ��� � 1 �� #����� �� �� ���� �������� ������ ��� ������ �0 �����

J��'�( 1 �J�'�(�6 J����'�( 1 'J���'�( E J�'�((

��

� �� �� � ��� ��� ���� �� 1 'J���'�( �� '�E7(� J�'�( �� '�E7(( � ��� �������� �� 5'( ������ ��� � ��� ���� ��� �� 5'�( ������ #� �� �������� �� ��J�'�( �� '� E 7( ����� 5'�� �( ���������� B ��������� �� ��'�( E ��'�

��( ������ ��� �� �E 7 ���� ����� � � ���� M ��� $�� � � �� �

������������ J���'�( �� ��� ������ ��� Z�'�� �� � � � � �( � � ���� ��� ���������6 ��� ?0� :�5�4"'�(� #� ��$� J���'�( 1

�����

�����

������ 1 ���D�'����(� �����

D� �� ��� ������� ��������$ �������� ��&��� �� D�'� 6( 1 ���'' E 7(6(���� 6�

� �� '�( ;� ������� 78�'(� �'A( �� ��� ����� � � � � ���� '�E���(J�'���E7E�( - �

'�� � ��� E 7(� ���� �������� ��������� �� �� ?0 �$�������� ��F� ��� �������������$� � �� ���� J�'�( �� � � ������ � '��� E 7(�'�� E 7( 1 '7 E � E � � � E ����(������ � 1 ���E7E��

Page 110: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ 5;

6��� 6(���0��� �����,H�1�:@���0!����&��������

'�( Y�� ��� ����� � ������� 78�'�( � �$�� ��� ''�E���(J�'�(( �� '��� E7(���� � 1 E��� �� ��� ����� ��$���� � � E � �� ��� ��� �� �� J��� ��� E � E�� ��������� ��� ������ �� � � � ��� �� �� J��� �'A( 1 E �

'( #� ���� � ��� ���� �'��( �� � ��$��� � 4 � ���� � � �� � 4 � ���� ������ /�� ������ ���� ��� �� J����'�( 1 ��

����� �� ������$��� ����� � �����

E7� /������� ���� ��� ��

J ����'�( 1 �������J'�(

���� 1 �������'7 E �(�

1 �������'���E�(�

���� �� - � �� � �����

E 7 � � �� �� � ���

E 7�

'�( J����'�( 1��

��� ������� ���� � 1 ���'7E�E��( �� ������$��� ����� � ��E7�

�� ��$� ��� - ��E���E � � �E�������� '�� � ��E7( �� ��� ������ ��6 ����

���� - ��E����� E � � �E�����

������� - ��E������� E � � �E�����

��������� - ������

'�� � �� E 7( �� � � � � 2� ��� �� ����� ���� J�����'�( �� � � ������ � ��� E 7�

'�( �� ���� ��� �'A( ��$���� :'��� � 7(� I��P <�� �� E 7 1 ��'�(��'�( � � � ��'�(����� ��'�( 1 � E 7� ��'�( 1 �� E � E 7� ��� ��� ��'�( �� ����� ���� �� �� ����A �� ��� ����� ����� ��� �������� /�������� �� ��� &���� &��� � ��������� ����'�( �� � � 4� �� ��$� ���� 1 ������ �� �� '�(� ����0 ����� J�����'�( �� � � ������� �'�( � � � ��'�( 1 '�� E 7(�'� E 7(� � J��������'�( 1 �J�����'�(

� �� � � ������ �

'��� E 7(�'�� E 7( �� ��������

'�( �� J/���'�( �� � � ������ � ���E7� ��F� ���� � ��� ���� �'�A( 1 ��'A(� ,��������J/���'�( �� � � ������ � J'�( 1 '7 E �(� 1 ���'7 E �(�6 ���� J�/���'�( �� � � ������� ��� E 7 ��� �'�A( ��$���� �'A(� /�� ������ ��� �� ������ ��� ���� A �� ���

� ���� I����� �������� ��� ������� � � �� ��� � JJ�� ����� G<����� , ��H���� ��� ��$����� �� ��� ����� 78*�� �� +��� Y��� ��� ��$����� ������������� �� ���� ���� ���� �� <S��J�S B��� ��� ����� � C��� +�$�� ����������F� 2!'�-

2�-!��� ��� �� �3* '� ���� 78*5(� 48":�6 +����� =�������� 2!'��� 3 3!�

'B��� ��� (� �4"�5�D A�� � � ���� ��� � �� �� � ����� ������ � ���� ����� ��������-�� 2� !�� �-���-� ��� '����(� :8"�4�

� �� <�� ��������� 1 ��� � ����������� 1 ��� � ������� � ����������� 1 ��� � �������� ���������������� 1 �� �� � � � � � ��� � � � � � ����� �� ������ ��� 1 � ���� � 1 �� � 1 � E 7 � � 1 � � � 1 E 7� #� ��F� ��$� '������� ������� � � � � �����������( 1'�� �� � � � � �( ��� �� '���� � � � � ���( �1 '�� � � � � �( �� 7 � � � �� !�� �� ��F� ��$�'��������� ��������� � � � � �������������( 1 '�� �� � � � � �( ��� �� ��O���� ��� '���� � � � � ���(��� '�������� � � � � �������( ������ ��M�� �� � � � � � ���� � �� ���

� �� ��� H� � '7 � '��(( '7 � '��7(( �� 7 � � � �� ����� � 1 ���� !�� ���O� � 'H� 3 ���( E 'H� 3 ���( E � � �E 'H� 3 ���(� ����� ��� �� ��� ��� �� � ��� ������������� ���� ������ ���� H�6 $��� O� ����� ��� ������� �������� � � � � �������/��� ��� = � � ��� ����� � �� ���� % � ������ 78: �� � � 7� �� � � � � �� /�� ��� �����$���� 6�� � � � � 6� ��� � ����� �� ��� � ������ �������� ���� *���� ���������

/ ���� �� ��� � � ������� �� ������� ��� ��� ������� �������� ���� 6� &��� �� J���� �� ��� �� ��� �� 1 E 7� ��� ������ �� ���� �� ��'��� � � � � ��( � � ��� �������� �� �� ������� � ����� ������� ������ ��� ������� �� �� ����� � �� ���������������� � �� � 7 ��J�� ������ ��������� � ��� 6 $�����

Q� �������� ���� 1 8 �� &�� O� 1 7777�7777� O� 1 O 1 �7�7�7�7�� O� 1���������� O 1 ��7�7�7��6 ���� = 1 �� 6� 1 �77���77�� 6� 1 ���7�7���� �� 1 �� 1 5�� ����� �� � ������ �� ����

Page 111: The Art of Computer Programming - Bitwise Tricks and Techniques

5= ������� � �8������ *� �"

�����!����� ��������������������"H������E�( �!7��� �������0�����#����%�������������0��

�� ��� � ���F� ����������� �� � 4���� G�� �� ���H ��� ������ ��� ���� 1 7��8� /��� = 1 �7 ��� ��� $�� �� � �� ���� ��� �0 �� � 7�7 � *55 ����� ������� 1 4:�� /�� �� ��� 6� � 6�� ��� � �� ������������

/�� ������� �� 7 � � 4*4 ��� :� 5� 77� 7 � �4� �8� 4�� 4�� :�� 58� �� :� 5�*:� 85� 7�7� 778� 7�5� 7� � 7�*� 747� 75:� 7 :� 7��� 7*5� 787� ��4� ��:� �48� �57� �5:��5 � �5�� � 4� 47:� 4�8� 4:�� 4:7� 4�7� 4*4�

C! ������ ������� � Q��� ��� ����� ��� G����� ��������H ������� �� � ����� ��@� ?������� A� ?������� ��� L� �O������� $����-�� �� $ ���� "���� �� '���7(� 4 5���� ��� �� #������ $ &�= @��� � �-���-� '����(� � �� 75�- � ���� :48�D

� �� ��� H� � 7� '� � �( ��� O� � �� �� 7 � � � �6 ��� ��� = � �� /��� ��������� ������� � �� ���� �� � 1 7� �� � � � � �P

��� C?����� �� ����D ��� � � O� 3�O�� �� � 1 �� � � %:�

��� CQ��� ��D Q��� ��� �������� � � 7 � � ���� O� 3 � �1 � ��� O� 3 '� � 7( 1 ��

��� C+��������ND �� � � �� ��� O� � O� � O� � H� � H� � H� � ��� ��� �� � %7�'/���� �������� ������$� ��� ������ �0 ���� # 1 "!�( ,�������� ���������� ��� � �� ���� '��� �� O� �� �������� ����������� ��� O�� � � � � O���(�

��� C-��� � �� ����D ��� = � = E 7 ��� 6� � H��

!� ��� �� ���� ��� � � = ��J�� $���� O� ��� � ����� �� ��� $��� ���� � ��������� ��������� � ��� � � � � ��6 ����F�� ��������J�� �� ����� �� �����

� � '�( �#�6 �����6 ��B��4B6 � #4�@?@$�

'�( �� -� 1 -��� ��� ��� �� �� ���� ��� �� 1 �� ,�������� �� ��$� �� � ����

'( ��� � � �6 ����� �� ��@# � �>#� ��� � � � �7� /��� �'����( ������ ���� �� �

� � '�( �###�6 �#���6 �B�4B6 ��@�>��>$�

'�( <��������� ���� �� � � ������$�� ����� ���� � 1 � ��� �� 1 �$####�

'( / ������ ���� 0 ����� ������� �� ����� � ��� ���� ��� ��:* ���������� ��� ����� ��@## � � � ��### ��� �� ����� ������� � Y��6 ���� ��� ������)$$ '����� #��� ���� ������������� H'����( ������ �� �� �� � � ���## � �#>##��������� �� ������ �� �����

� �� � 1 ��?######� � 1 4� � 1 � �� '#� �� ��� � 1 �� � � ���� � � �� �� � ���/��� ���� ��� � ������� �� I� -���� ��-����� �� 788��(

� �� #� ���� �� ��$6 ���� E �� � � >4#6 ��� ������ '�� 3 ���( E �� � �$## ��� E �� �$B � /���� ������� ��� �� ��� ��� ��

'��$���(3'����E���� >4#(3,''��3���(E����$##( '�$B ������(. � ��

B��� � A �� � ������ ������ ��� � ����� �� �� K 3 ,�%# � ''���� E��(� ����(.F� ���� �� ���� ���� ����F� ����� ��� ������ � � � �������

� � �� 9� 1 '�� � � � ����(�� ���� 94 1 ��'��� ��� ��( 1 '��3��( '��3��( '��3��(�

���� �/! �D�D�� ����� � 1 � # # # ## # # # �

���� �/! �D�D�� ����� � 1 ��#�#�#�##�#�#�#� 6 ���� �/! �D����D�� '��� ������ �� �(

���� � 1 �###@###>###%###$ � � 1 �# # # # # # # # � � 1 �#J#J#J#J#J#J#J#J �� 1 �######%B######## � � 1 �%�%�%�%�%�%�%�%� � '/�� !���� �� �� # �� E �%�6��� !���� �� �� � �� E �%� E 7� E �%B�(

���� � 1 �@##@>##>%##%$##$ � A 1 �@#%##@#%>#$##>#$ '��� �������� � �(� = 1�>#@#$#%##>#@#$#% '� �������� ������(� ��� � 1 ���??��??��??��?? �

Page 112: The Art of Computer Programming - Bitwise Tricks and Techniques

*� �" ������� � �8������ 5*

E���-��,�1���(�� !���' ������!�(��(��� ���������,1��&�0%����������P���E���

���� L �� ����� � � �#@@##>>##%%##$$# � '������������ ����� �� X�� �� ��� ����&��� �� ���� ������ � � 1 '�� � � � ����(� �� ������ ���P /�� ��� X� ������ �� ����� ��� � ����� ��� ���� X� ���� �� �� ������� ��� ��(

��� '�� ��� �� @� �� #������ L��( /�� ����F� ������� 7:������ �*����� ����� ���� ����������� ���� ��� 7� ����� ����P

�/! �D�D�$F �/! �D�$D�F G= ��D�$F �G� �D�D�F

�/! �D�D�%F �/! �D�%D�F G= ��D�%F �G� �D�D�F

�/! �D�D��F �/! �D��D�F G= ��D��F �G� �D�D�F

���� �$ 1 �>#@#$#%##>#@#$#% � �% 1 �%#$#@#>##%#$#@#> � �� 1 �#@#>#%#$@#>#%#$# ��$ 1 ���??��??��??��?? � �% 1 ����������������� � �� 1 � # # # ## # # # �

��� Q � ����� ���� � �P ��/! �D�D�F ��/! �D����D�F ��/! �D�DIF �/! �D�D�F

���� � 1 �@#�#�# # @ � � � ���� 1 �7� ��� I 1 2��

���� <9G �D���D�F �/! �D�D�F &:) �D�D�F �/! �D�DE F ���� �������� ��� 1 7�

���� �� �������� ������� �� � ��� ;���� ������ ��� � !�" ��� ��� ��� � �����

Q� ���� ������ �� ��� ��� 1 C�� � D ��� ��� 1 C , � D6 ��� ������ �� K�/! �D D�F

�/! �D�D�F ����� � 1 �@#�#�# #@@���� ��� � 1 � ??��$$# #?#�#$ 1 �� �'%��� ���� ���� ���� ��$�� � ������ ���� C� 1 U� D �� ��������� Q ���������

��� :���� ��� �� '�� � � � ����(� ��$�� ��� ������ � ��� � ��������� �������������

�'��� � � � � ��( 1 '�� E ����� E � � �E ���������� E ������������( �� ��

�� �� � ����� �� ��/! �� �/!� �� ��� ��� �� � ������� ��7�7"77�(

�� � �� � ������ ��/! �� �� '01+( ��� � 1 'H� � � � H�H�(�� ��� ����� H� � �� �� �$�� ���

� 1 '��"+� (� ''��*(�'"+

� E"'� ((� ''��7 (�'"+

� E"'� ((�� � �� ''��5 (�'"+

� E"'� ((�

����� "'� 1 'AH�( 3 �� "+

� 1 '''AH�( � *( E H�( 3 �� A 1 �##@#>#%#$##@#>#% � ���� 1 �B � $ # #B#�#$## � '@��� AH� ������ $����$� � ���������� � ���������(

���� �� ���� ���������� �� ������ �������� �� ���� �� ��� �������� ���� ������ ��� ������ ������� ��� ��$�� ����� ���� � � � ���� �� ����� '���� ���� &���(�/�� ������� �� 1 �@�@$@#@#@#>#%#$# ��� �� 1 ���4�� J?�#$@#�#J ������� �������� ! ��� "� � �� �� �� ���� ��� ���������� �� �� �'�( �� �� � � � *��

<"= �D# � � ��&)) ��D��D@ � � *�9)/G �D����D�� � � ���� ���'Q ��D%* +�� �� 1 ��

$P ��/! �D��D� � � � � !���/! KD��D� & � � � "�&)) ��D��D@ � � *�

9)/G �D����D�� � � ���� ����/! �D�D� � � � � ��<9G �DKD?J � � & � 5 �<!G KDKD@ & � & � *��/! �D�DK � � � � &��/! �D�D� � � � � �� ': ��D$' -����� �� ��

! ������� ����� &������ ��� O�� ���� � � ������� ����� ������P

%P <"= ��D@ � *��P &:) �D�D ��� � � ���� �����

��/! �D���D� � � � � !����/! KD���D� & � � � "��<9G �D�D@ � � � � *��/! �D�D� � � � � ��

<!G KDKD@ & � & � *��/! �D�DK � � � � &�<G' ��D��D$ � � 7� ' ��D�' -����� �� ���/! �D�D� � � � � ��<!G ���D�D>@ -�� �� � � :*�

@��� ��� 1 �@�@$@#@#@#@#@#@# � ��� 1 �#�@���J���$�# #? � ��� ��� 1 � ##���##�

��� /���� �� �� �%-4���%��. ���� ���� ��� ���������

� ��(��� �����5��� ������ ��� "����� 0���� 1����� �� �� 2��� � ����

Page 113: The Art of Computer Programming - Bitwise Tricks and Techniques

5< ������� � �8������ *� �"

�(� ���/!������# !���'

���� ;� ��������� ��� ����� ���� ����� � ��� ����������� �������� � ���� � �� ��$� �� 1 P ����� 1 � � 4� � 5 � � � 7� � 47 � 7�� 1 7 * 7�*�� %��������� ��� ���� ���� ' � 7( 1 44 ��� � �� ��� ������� ��0 ��� � 44 ��/!

����� ���� � �� �� L 1 ��� 1 ����P ��/! �D�D�F ��/! C$D�D�F ��/! C%D�DC$F

��/! C�DC%DC%F ��/! �DC�DC�F ��6 ��/! �D�DC%F �6 ��/! C$D�DC$F ��/! �DC$DC�F

��6 ��/! �D�DC$F �6 ��/! �D�D�F ���� � ������ �� K��/! �D�D�F� / ���� �� � �������� ���� � ��/! �D�D� ��� ����� � � ��� �������� ������ �@#>#%#$##@#>#%#$ �

Page 114: The Art of Computer Programming - Bitwise Tricks and Techniques

��� �� �� �����

�9$5 "5 �5)$: $5!%( %$;$%0 !� " 6"<$ �5!"�5�5< " %$3$4"5! $:$% �0$7 0$$ "30� !9$ ������ !�!9"! $:$% �0$ ;�% ;2%!9$% �5;�%1"!��5= �5 "50'$% 6"<$ �0 5�! �5)$:$) 9$%$ 253$00 �! %$;$%0 !� "!�6� 5�! �5 32)$) �5 !9$ 0!"!$1$5! �; !9$ $:$% �0$=

#>� 1"!%� $07 *->-#7 ��� ���� ��!1"60=123!�63� "!��5 �;7 ,#>,�7 ,*=!%"506�0�5<7 �,7 ,*7 *-7 */7 .#=!%�"5<23"%�?�5<7 *.=

#>� 6%�5 �63$7 ,&=�� �!9$ �50!"5! � � � � ������7 �7 .7 /7

,#7 -�7 -*7 �#*7 �#-=��")� 9"�507 ��>�-7 �-7 *�7 /�7 /*=��")� ;%" !��507 /7 -,=��")� �5!$<$%07 �7 �*7 ��7 ,�7 ,,=

"0 " 1$!%� 06" $7 -&=��+�! $5 �)�5< ;�% ��0!"!$ )"!"7 �.>��7 *�=�� 2+$ $@2�4"3$5 $7 �/>�#=��)�1$50��5"3 )"!" "33� "!��57 �*=����� �!�1$0 � "5) ")) 250�<5$)�7 -/7 .&=��4"32$) 3�<� 7 ��7 *�=&�5$�<9+�%07 ��� ���A�5$�<9+�%07 &#= ���� �!�1$0 & "5) ")) 250�<5$)�7 -/=.�5$�<9+�%07 ��� �5<�5$�<9+�%07 &#=����� �!�1$0 . "5) ")) 250�<5$)�7 -/=������ �!�1$0 �* "5) ")) 250�<5$)�7 -/=� ��5B5�!(�7 .7 ,,=�1"607 .&=�09�;!07 �*=�0'"607 ��>�,7 ,#7 ,,>,*7 �#-=�� ��3< ���7 ��� ��5"%( 3�<"%�!91=� �"4$%"<$ 1$1�%( " $00 !�1$�7 ��-=�� "5) ����7 ����"<� 1"0A0=��7 ��� ��)$'"(0 "))�!��5=��7 ��� �23$% ;25 !��5=� ��50!%2 !��5 ( 3$ !�1$�7 ��-=

�+0�%6!��5 3"'07 �=�+0!%" ! ��� �%$)2 $)��50!%2 !��5�0$!

�162!$%� 1�)$37 �*=� A3"5)7 �%("5 �"4�)7 &&=� ( 3� )�<%"697 ��=�))�!��57 �7 �/=

+(!$'�0$7 �/7 .-=0 "!!$%$)7 �.7 ,-=0�)$'"(07 �7 ��>��7 ,,7 *�7 /&=

�)C" $5 ( 1"!%�: �; " <%"697 �.7 *�=�)4$5!2%$ <"1$7 .,=�<%"'"37 �9"%1" �%"A"09 ���� ����

�����7 -�=�3+$%07 �20"55$7 ..=�33� "!��5 �; 1$1�%(7 ��7 ,&7 ,/=�33�2 9$7 D$"5��"237 -.=�369" 9"55$307 ,/=�369"+$!� )"!"7 �#7 ,/=�5"3(0�0 �; "3<�%�!9107 ,,7 .,=�5 $0!�%0 �5 " ;�%$0!7 ��=

5$"%$0! �11�57 ��>�,7 *&=

��/ �+�!'�0$ �5C25 !��5�7 �>�=�5�1"!�5< ;25 !��507 ,�7 ,*=�%�(�09�7 ��%�12 � �7 /�=�%5)!7 DE�%< �'$7 -*7 .&=���F �1$%� "5 �!"5)"%) ��)$ ;�%

5;�%1"!��5 5!$% 9"5<$7 �47 ,/7 */7 ��-=�00� �"!�4$ 3"'07 �7 -�=�0!$%�0A �)$0 ;�% 02+ 2+$07 �.7 *�=�4$%"<$07 +(!$'�0$7 �/7 ,/=

�" A<%�25) �; "5 �1"<$7 &�=�"3"5 $) +%"5 9�5< ;25 !��507 ,�=�"3"5 $) !$%5"%( 5�!"!��57 *�7 -/=�"5("5 5$!'�%A07 .�=�"0� ��� �%"5)�1�" $00 1" 9�5$�

1�)$37 �*7 *�7 /�=�"21<"%!7 �%2 $ �2$5!9$%7 ��=�"(07 D�95 �"%!$%7 --=��� �+(!$ )�G$%$5 $�7 �#7 .*>.-=�$5$H07 �I" 3"4 �)4"%)7 ��=�$5!3$(7 D�5 ��2�07 /,=�$%3$A"167 �3'(5 �"3697 ��7 -�7 /.=�$%509!$JK57 �$%<$JK �"!"5�4� 9 �����������

���� ����� ����7 �#�=�����* ������� �162!$%7 .�=�$($%7 �$5)$33 $%%(7 &�=�I$?�$%7 ��$%%$ �!�$55$7 063�5$07 &.7

**>*-7 �#�=��<�$5)�"5 �54$5!��57 *>.7 ��7 �#7

--7 �#�7 �#-=��5"%( +"0�07 -�=��5"%( 3�<"%�!91 ��� L �3< ���7 �#>��7

��7 �,7 ��7 ,,7 *#>*�7 *&=��5"%( %$ 2%%$5 $ %$3"!��507 .7 �#7 ,,=��5"%( 0$"% 9 !%$$07 *&7 -/=��5"%( !%$$ 0!%2 !2%$07 ��=��5"%( 4"32"!��57 ��� �23$% ;25 !��5=��5"%(� �)$) )$ �1"3 5�!"!��57 *#=��6"%!�!$ <%"6907 �&>�,7 /-=��! +�"%)07 ��7 *�=��! �)$0 ;�% 02+ 2+$07 �.7 *�=��! 6$%12!"!��507 ��>�-7 �,7 ,#=��!1"607 �/>&.7 *&>*.=

3$"5�5<7 *,=)%"'�5< �57 &.=B33�5< �5!�2%0 �57 &&>&.7 **>*-=%�!"!��5 "5) !%"506�0�!��5 �;7 *-=

��!'�0$ 1"5�623"!��507 �>�#.=�3" A 6�:$307 &7 &#7 *-=��3("�7 DI"5�07 �*=���A'�%1 6%�+3$17 ,&=���3$"5 1"!%� $07 ,#7 */7 ��� ���� ��!1"60=

123!�63� "!��5 �;7 ,#7 ,*7 �#-=

�#/

Page 115: The Art of Computer Programming - Bitwise Tricks and Techniques

5 ���8 ��� ��������

��%A�'0A�7 �2)'�A �!$;"57 ��=��%%�'07 .*>.-=��25)"%( 2%4$07 )�<�!�?$)7 &&>&.=��2!�57 �9"%3$0 �$�5"%)7 -�=�%"5 9 �50!%2 !��507 �#7 &.>&/7 *�=�%"5 9�5< ;25 !��507 ,�7 ,*=�%"5 93$00 �162!"!��57 ��>�*7 &.>&/7

*/7 -#=�%"(1�%$7 �"%�3�5$7 �=�%$")!9�B%0! 0$"% 97 /�7 /-=�%$5!7 �� 9"%) �$�% $7 .�=�%$0$59"17 D" A �3!�57 �#�=�%$2$%7 �$34�5 �33$57 /&=�%�")'�%) 9"�507 ��>�-7 *#>*,7 /*=

0!%�5<7 *�=�%�")'�%) �162!"!��507 ��>�-7 *#>*,=�%�)"37 �$%!9 �!M3!�5<7 ��=�%�)5�A7 �5)%$C7 �-=�%�57 ��$5%"")7 /�=�%��A$%7 �"369 �5!9�5(7 �=�%�'57 �"4�) %$5!7 ,�=�%2�C57 �� �3""0 ��4$%! )$7 ( 3$07 �#=�E2 9�7 D23�20 �� 9"%)7 -,=�2!!$%N( 5$!'�%A07 ,*=�(!$F �5 .�+�! @2"5!�!(7 */=�(!$ 6$%12!"!��507 ,#=�(!$07 6"%"33$3 �6$%"!��50 �57 ����23!�+(!$

6%� $00�5<=

�" 9$ 1$1�%(7 ,7 �,7 &/7 --7 /�=�"957 �$�5"%)7 &#=�"5 $33"!��5 3"'7 -�=�"5!�%7 �$�%< �$%)�5"5) �2)'�<

�9�3�667 .,=�"%)�5"3�!( �; " 0$!7 ��=�"%%�$07 �.>�/7 �,7 .*>.-=�"%!$0�"5 ��%)�5"!$07 &&=�"%!$0�"5 !%$$07 -/7 /,=�$3323"% "2!�1"!"7 &#>&�7 *,>**=�9$+(09$4 �L 0 9$+(0 9$G�7 �";52!��

�4�4� 9 ��������� ����������� ����7 6�3(5�1�"307 �#&=

�9$09�%$ "!7 &�>&�7 *,7 **7 �##=�9$00+�"%)07 ��7 *�=�925<7 �5��"5 � �7 �-7 ,.=��% 3$07 )�<�!�?$)7 &&7 &-=��% 23"% 3�0!07 *�7 �##=�3$"5�5< �1"<$07 *,7 /.=�3�;!7 �$�33 �� 9"$37 �#.=�3�@2$07 1":�1"37 *�>*�=�3�0$) +�!1"607 *,=��33"!��5 �; +�!07 �=��31"57 �$�%<$7 !9$ (�25<$%7 �=��1+�5"!��507 -,>-*=��112!"!�4$ 3"'07 �7 -�=��16"%�0�5 �; +(!$07 ��7 *#=��163$1$5!"!��57 �7 ,�7 /�=��163$!$ +�5"%( !%$$07 ��7 -&=

�5B5�!$7 ,�=

��16�0�!��5 �; 6$%12!"!��507 ,�7 ,*>,-=��16%$00��5 �; 0 "!!$%$) +�!07 �*7 ,-7 .�=��5)�!��5"3�0$! �50!%2 !��507 />�#7 &.=��5� 0$ !��507 )�<�!�?�5<7 &&>&.7 **>*-=��5� 063�5$07 �#�=��5C25 !��57 �5 ��4"32$) 3�<� 7 ��=��55$ !�4�!( 0!%2 !2%$ �; "5 �1"<$7

&�>&�7 **=��50$5020 �; 02+ 2+$07 *�=��5!�52"5! 6�3(5�1�"307 �#&=��5!%�3 6��5!07 &.=��54$: �6!�1�?"!��57 .,=��5'"(7 D�95 ��%!�57 &#7 -�7 -&7 /.=

B$3)7 ,�=��� � ( 3� %$)25)"5 ( 9$ A�7 ,�7 -#=�%�00+"% 1�)23$07 �&7 ,.=���� � �5)�!��5"3 0$! �; 5�5?$%��7 �#7

&.>&/7 ..=���� � �5)�!��5"3 0$! �; �))�7 -/=��� � �5)�!��5"3 0$! �; ?$%��7 /7 --7 -.=�20!$%�5<7 �/7 &&7 *&>*,=�( 3$0 �5 " <%"697 �,=�( 3� %$)25)"5 ( 9$ A�5<7 ,�7 -#=�( 3� 09�;!07 �-7 ,*7 .*=�(3�5)$%7 9(6$%+�3� 7 �/7 /-=

�"33�07 DI�?0$;7 /=�"!$07 6" A$)7 &7 *#=)$ �%2�C57 �� �3""0 ��4$%!7 ( 3$07 �#=�$6!9 �; " ���3$"5 ;25 !��57 ��=�$0 "%!$07 �$5I$7 ��%)�5"!$07 &&=��$!?7 �$5%( ��%)�57 �/7 .,=��<�!�?"!��5 �; �5!�2%07 &&>&.7 **>*-=��CA0!%"7 �)0<$% �(+$7 .,=��%� 93$!7 D�9"55 �$!$% �20!"4 �$C$25$7

<$5$%"!�5< ;25 !��57 -.=��0 %$!$ 3�<"%�!917 ��� ��5"%( 3�<"%�!91=��0C��5!5$00 !$0!�5<7 ,.=��0C25 !��57 �5 ��4"32$) 3�<� 7 ��=��0!"5 $ +$!'$$5 ��")� �5!$<$%07 -&=��0!�5 ! +(!$07 !$0!�5< ;�%7 ,/=��0!%�+2!��5 5$!'�%A07 ����"66�5<

5$!'�%A0=��0!%�+2!�4$ 3"'07 �7 -�=��4�)$ "5) �5@2$% 6"%")�<17 ��7 �*=��4�0��57 ,&=

"4��)�5<7 &7 ,&=+( �#7 �&=+( 6�'$%0 �; �7 �>&=�5 ��5'"(O0 B$3)7 ,�=�; ��+�! 521+$%07 ,/=

��1�5"!�5< 0$!07 1�5�1217 /.=��5O!� "%$07 �.7 �/>�#7 .�7 /&=��!�1�520 �6$%"!��5 ��

=���7 47 �#7

�&7 *�7 .�7 /*=��2+3$ �%)$% ;�% !%"4$%0�5< !%$$07 �##>�#�=�%"'�5< �5 " +�!1"67 &.=�2"3�!( +$!'$$5 # "5) �7 //=�2<2�)7 �5)%$' �$34�33$7 ��=/P� ��� 6%�<%"17 �#�=

Page 116: The Art of Computer Programming - Bitwise Tricks and Techniques

���8 ��� ��������

�)<$0 +$!'$$5 6�:$307 &&>&.7 **>*-=����� �162!$%7 �7 ��=��<9! @2$$50 6%�+3$17 /�=�33�60$07 &&>&-7 �#�=�5 �)�5< �; !$%5"%( )"!"7 �.>��7 *�=��B33 �$4$5P�)) B33�5<�7 &-=�@2"3�!( �; +(!$07 �#7 ,/7 *#=�@2�4"3$5 $7 �5 ��4"32$) 3�<� 7 *�=�%"!�0!9$5$0 �; �(%$5$ �����������

���������Q 0�$4$ ��������7 ,7 ,&=�%�A00�57 �$5%�A7 �#*=�%�A00�57 �11�7 �#*=�0 9$%7 �$�%<$ �=7 �-=�0 9$%7 �"2%�!0 ��%5$3�07 �-=�2 3�) �����������7 �*=�:!%" !�5< +�!07 �7 &7 .=

"5) �16%$00�5< !9$17 �*7 ,-7 .�=!9$ 3$"0! 0�<5�B "5! �53( ��� �7

.>�#7 �.7 ,&=!9$ 1�0! 0�<5�B "5! �53( ��! �7 ��7

*#>*�7 ./=

�"0! ��2%�$% !%"50;�%107 ,*=�$%%"5!� �$% 2%( �162!$%7 �=��+�5" �7 �$�5"%)�7 �; ��0" �L �$�5"%)�

B3�� ��5" �� ��0"5��7 521+$%07 �*=��+�5" � 521+$% 0(0!$17 �*7 *&Q ��� ����

�$<"��+�5" � 521+$% 0(0!$1=�))7 /*=

��+�5" � 6�3(5�1�"307 *->*.=��$3)07 "3<$+%"� 7 ,#7 ,�7 �#,=��$3)0 �; )"!"7 ��� �" A�5< �; )"!"=��33�5< " �5!�2% �5 " +�!1"67 &&>&.7 **>*-=��5<$%6%�5!07 &#=��5�!$ B$3)07 ,#7 �#,=��5�!$ 0!"!$ "2!�1"!"7 ./=��0 9$%7 D�9"55$0 �9%�0!�"57 /,=��09$%7 �"5)"33 D"1$07 �/7 .,=��:$) 6��5! "%�!91$!� 7 .*7 �#�=�3"<F � ��+�! �5)� "!�%7 �#7 ,/7 *#=�3�"!�5< 6��5! "%�!91$!� 7 �#7 -.=�3�()7 ��+$%! �7 ,.=���!6%�5!07 .-7 /�=�%" !"307 *.7 -.=�%" !��5"3 6%$ �0��57 &7 */=�%"<1$5!$) B$3)07 �.7 ,.=�%$)1"57 �� 9"$3 �"'%$5 $7 ��7 *#=�%$$)7 �)'�5 �"%37 ,,=�%$(7 �$!$% ��33�"17 /&=�2 907 �"4�) �"(1�5)7 //=�233 "))$%07 /.=

;�% +"3"5 $) !$%5"%( 521+$%07 *�=

�"+�'7 �"%�3) �$�37 /,=�"1$07 &#7 ,�7 .,=�"607 +$!'$$5 6%�1$ 521+$%07 --=

+$!'$$5 �3"1 521+$%07 /�=�5 " 0 "!!$%$) " 2123"!�%7 .,=

�"%+"<$ �33$ !��57 �-=

�"%)5$%7 �"%!�57 &#7 /.=�"!9$%�5< +�!07 .�=�"2R �L �"200�7 D�9"55 �%�)$%� 9 �"%3

�L �"%3 �%�$)%� 9�7 �*=�$+9"%)!7 ��$!$%7 �#,=�$5$%"!�5< ;25 !��507 ,,7 ,-=

��%� 93$!7 -.=��337 �!"53$(7 ��=��33�$07 ��5"3) �%2 $7 ��=�3")'�57 �"%1�5 �1�!9(7 .=��06$%7 �"369 ��33�"17 D%=7 47 ,*7 -#=

9" A7 &7 ,&=�%"6907 �&>�,=

"3<�%�!910 �57 �->�.7 *�>*�=�%"(7 �%"5A7 +�5"%( �)$7 -�7 ./=�%"( 3$4$30 �5 �1"<$ )"!"7 ,/7 *-=�%$$)(�;��!6%�5! 9$2%�0!� 7 .-7 /�=���� �<3�+"3 %$<�0!$% )$B5�!��5�7 /7 ��=�%�) 0!%2 !2%$7 �*7 /.=�%�26 �; ;25 !��507 ,�=�%�26��)07 123!�63� "!��5 !"+3$0 ;�%7 ��7 *�=�%25)(7 �"!%� A �� 9"$37 -�=�2�+"07 �$�5�)"0 D�95 ��������� �������

��� ���7 47 �#�=�233�4$%7 �$12$37 �#-=�2�7 S� 9$5< �9"%3$0 � �7 &�7 *,=�2(7 �� 9"%) $55$!97 -�7 /.=

�" A07 �>�#.=�"<$%267 �%+$57 ..=���,�,7 �*7 -�7 -,=�"3; "))$%07 /.=

;�% +"3"5 $) !$%5"%( 521+$%07 *�=�"337 �� 9"%) �$03$(7 D%=7 &�7 *,=�"1+2%<7 �� 9"$3 �3$:"5)$%7 -,=�"%)(7 ��);%$( �"%�3)7 -,=�"%$37 ��4 ����� ���7 ��=�$"607 ��=

0�)$'"(07 ��7 *�>*&=�$ A$37 �"23 �9"%3$07 .�=�$%%1"557 �%"5 �5$7 �*=�$257 ��3A$%7 /,=�$:")$ �1"3 �50!"5!07 4=�$:")$ �1"3 )�<�!07 */=��++(7 D�95 ��2<3"07 &.7 �#�=��3$0 �5 �1"<$07 &�>&�=��33�07 D$G%$( D�957 *�=�2)0�57 �� 9"%) ��'"%)7 --=�25!7 �$�37 �#�=�(6$%+�3"07 &&7 **7 -,7 �#�=�(6$%+�3� 63"5$ <$�1$!%(7 �,>�/7

&-7 *&7 /-=

)$7 ��A�� � �7 /�=)$5!�!�$0 ;�% +�!'�0$ �6$%"!��507 �7 ,�7

,�7 ,,7 -,7 --7 .*=)$5!�!( 1"!%�:7 �#.=������ � �162!$%7 ��=163� "!��57 �5 ��4"32$) 3�<� 7 ��=163� �! )"!" 0!%2 !2%$07 ��>�/7 *�>*&=

Page 117: The Art of Computer Programming - Bitwise Tricks and Techniques

! ���8 ��� ��������

5)$6$5)$5! 0$!07 1":�1"37 *�=5B5�!$ +�5"%( !%$$07 ,�=5B5�!$ $: 320�4$ �%7 -&=5B5�!$�6%$ �0��5 521+$%07 �7 &7 ,�=5�%)$% �; 5�)$07 ��=5092T$07 */7 .#=50�)$ �; " 2%4$7 &&=5!$% 9"5<�5< !'� +�!07 ,,=5!$% 9"5<�5< 0$3$ !$) +�!07 -�=5!$%3$"4�5< +�!07 �*7 ,/Q ��� ���� �$%;$ !

092T$07 S�66$% ;25 !��5=5!$%5$!7 ��7 ���=54$%0$ �; " +�5"%( 1"!%�:7 -#=54$%0$ �; " 6$%12!"!��57 ,#=0�1$!%�$07 -&=

D"%)�5$7 �� 9�3"07 /�=D�950�57 �"4�) �!�N$%7 /�=D�%)"57 �"%�$ �55$1�5) �"1�33$7

2%4$ !9$�%$17 &&=

""07 ��+$%!7 ��= ""0�3"7 �"16� D29"5�7 �#�= "!"C"�5$57 D(%A� D29"5�7 �,= $%+�0 97 D�$6 �= �= �=7 /�= �5<�5$�<9+�%07 &#= �5<'�0$ �55$ !$) �16�5$5!07

&�>&�7 *,>**= �%0 97 �200$33 �5)%$'7 &#7 *,= 5�<9! 1�4$07 *�= 52!97 ��5"3) �%4�5 � �7 �7 47 ��7

--7 -.7 /�7 //7 �#�7 �#*= 2957 �"%A20 �E25!9$%7 �#*=

�"A9!"A�"7 �A93$09 �� ���� ��� ����7 -,=�"16�%!7 �$03�$ �=7 �/7 �#7 ,/=�"5)$%7 �$�5 D�0$697 --=�"%<$ 1$<"+(!$07 --=�"%<$0! $3$1$5! �; " 0$!7 ��=�"%4"3"7 �"123� %�0!�"57 .�=�"!�5�� 02663$1$5! !� ���7 .,=�E"2!$%7 �"%!�57 �#=�"'%�$7 �25 "5 �"1�097 .�=�$ ��%%$7 D=7 ��=�$"6 ($"%7 ..=�$"0! �11�5 "5 $0!�%07 ��� �$"%$0!

�11�5 "5 $0!�%0=�$"0! 0�<5�B "5! � +�! ��� �7 .>/7 ,&=�$$7 �2+( �$����9 � �7 .�=�$;!�!��%�<9! 1�5�1217 /,=�$;!1�0! +�!07 �#>��7 ��7 ,,=�$91$%7 �$%%� A �$5%(7 &=�$�0$%0�57 �9"%3$0 �%� 7 �#7 ,,=�$5;"5!7 D" @2$07 .#=�$50!%"7 �$5)%�A ��33$17 D%=7 ,�7 -�7 -&=�$4�"3)� �9�%�57 �!$;"5�7 &�>&�=�$:� �<%"69� �%)$%7 �.7 *.=3<7 ��� ��5"%( 3�<"%�!91=��;$7 &#7 *,=

��<9!0 �2! 62??3$7 �#,=��5A$) "33� "!��57 /�=��!!3$�$5)�"5 �54$5!��57 *>.7 ��7 �#7

�.7 -*7 --=��!!3$'��)7 D�95 �)$50�%7 -,=��+" 9$40A(7 ��A�3"� 4"5�4� 9

�� ���������� ��� ��!��� ���"�7 �*=

��2A"A�07 �11"52$3 ����� ����!�"����7 /�=

��'$% +�25)07 ��>�-7 *�>*�7 �#&=��'$% "0$ 3$!!$%07 ,/=��'$0! �11�5 "5 $0!�%7 ��� �$"%$0!

�11�5 "5 $0!�%=��()7 �"12$37 --=U�2A"0�$'� ?7 D"57 ��7 *�=�2!?7 �E2)�<$% "%3 �L �2)��7 �#�=�(5 97 ��33�"1 �9"%3$07 ��=

�"<� 1"0A0 ��� "5) �����7 />��7 �*7��7 �-7 ,&7 -�7 -,7 -*7 -.>.#7 .�7.&7 ..7 /*7 �#�=

�"C�%�!( ;25 !��57 �-7 ��� ���� �$)�"5;25 !��5=

�"3<�2(%$07 �I$1(7 //=�"5 9$0!$% �"%A �162!$%7 �=�"557 ��33�"1 �%$)%� A7 /.=�"66�5< 1�)23$07 ,.7 .�=�"66�5< 5$!'�%A07 ,.7 .�=�"66�5< !9%$$ �!$10 �5!� !'��+�! �)$07

�.>��7 *�=�"66�5<0 �; +�!07 �-7 ,.7 .�=�"%<$50!$%57 �"2%� $7 �*=�"%A �162!$% ��"5 9$0!$%P�$%%"5!��7 �=�"%!�57 ��5%�$ �"%5�097 �#=�"0AF � +�! 6"!!$%5 '�!9 �0 �5 A$(

6�0�!��507 /7 �*>�.7 �#7 &/7 ,#7 */=�"0A�5<F ��/�5< '�!9 " 1"0A7 ��=�"!%� $0 �; #0 "5) �07 *->-#7 ��� ����

��!1"60=123!�63� "!��5 �;7 ,#>,�7 ,*=!%"506�0�5<7 �,7 ,*7 *-7 */7 .#=!%�"5<23"%�?�5<7 *.=

�"!%�: 123!�63� "!��57 ,#>,�7 ,*=�"!%�: !%"506�0�!��57 �,7 ,*7 *-7 */7 .#=1": �1":�121� ;25 !��57 �7 ��7 *#=�":�1"3 3�@2$07 *�=�":�1"3 �5)$6$5)$5! 0$!07 /�=�":�1"3 6%�6$% 02+0$!07 ,.=�"(+$7 ��=� �%"5�$7 D2)0�5 �9"0!"7 /�=�$)�"5 ;25 !��57 47 ��7 .*7 .-=�$$%E�7 �I"0?3I�7 �#,=�$10F �$1�%( " $00$0=�$%<$ 0�%!�5<7 &/=��������7 �#�=1$: �1�5�1"3 $: 32)"5!� ;25 !��57 ,�=��A")� 6"!!$%57 �#*=��33$%7 D$G%$( �9"%3$0 �$% (7 ��=��3!$%0$57 �$!$% �%�7 �-=

Page 118: The Art of Computer Programming - Bitwise Tricks and Techniques

���8 ��� �������� "

1�5 �1�5�121� ;25 !��57 �7 ��7 *#=��5�1"3 $: 32)"5!7 ,�=��5�121 $3$1$5! �5 02+"%%"(7 *&=��50A(7 �"%4�5 �$$7 **=��:$)�%")�: %$6%$0$5!"!��57 *#=����7 ��7 �47 ,7 ->�#7 ��7 �/7 �#7 �.7 &.>,�7

,&7 ,,7 ,-7 ,/7 *#7 *�7 *-7 */7 -#7-�7 -/7 .&7 .*7 .-=

1�) �%$1"�5)$%� ;25 !��57 &=��)"3 3�<� 7 ��7 *�=����7 -*7 �����=��5�!�5$ ���3$"5 ;25 !��507 -#=��5�!�5� 6�%!��50 �; 2%4$07 &,>&-7 **=��520 �6$%"!��5 ��

=���7 47 �#7 �&7

*�7 .�7 /*=���)(7 D�95 $55$!9 ��5!"<2$

�L $5�7 *�=��� �123!�63$ �%�7 ��7 �/7 ,#>,�7 ,*7

*/>-#7 .*7 /&7 �#�=��%!�57 �2( �" )�5"3)7 .,=��0! 0�<5�B "5! � +�! ��! �7 �7 ��7 *#>*�7 ./=��� ������� �2)�� �"($% �7 ,�=�233$%7 �"4�) �2<$5$7 ��=�23!�+(!$ $5 �)�5<7 *.>*/=�23!�+(!$ 6%� $00�5<7 �/>��7 ,/>*�=

"))�!��57 �/7 .-= �16"%�0�57 �#>��=1": "5) 1�57 *#7 ..=6�!6�2%%�7 .-=02+!%" !��57 ,/7 .-=

�23!�3�5$"% %$6%$0$5!"!��5 �; " ���3$"5;25 !��57 �#-=

�23!�63$�6%$ �0��5 "%�!91$!� 7 *=�23!�63� "!��57 &7 �#>��7 ��7 *�7 -.=

"4��)�5<7 ��7 ��7 ,/7 -.=+( 6�'$%0 �; �7 �7 -.=�5 ��5'"(O0 B$3)7 ,�=�5 <%�26��)07 ��7 *�=3�'$% +�25) ;�%7 ��7 �*7 *�=�; #>� 1"!%� $07 ,*Q ��� ���� ��� "5) ����=�; 6�3(5�1�"30 1�) �7 -#=�; 0�<5$) +�!07 �/>�#=

�25%�7 D"1$0 "57 �-=��� �123!�63$:�7 ,#7 .�7 .*7 �#�7 �#-=���� �123!�63$ :�%�7 ,#>,�7 ,*7 */>-#7

-#7 -�7 �#-7 �#.=�( %�;!7 �3"57 �#=

�"4�<"!��5 6�3$07 �,7 *&=�$"%$0! �11�5 "5 $0!�%07 ��>�,7 *&=�$ $00�!(7 �5 ��4"32$) 3�<� 7 *�=�$<"+�5"%( 521+$% 0(0!$17 ,�=�$<")$ �1"3 521+$% 0(0!$17 �-=�$<"��+�5" � 521+$% 0(0!$17 �*>�/7 *&=�$<"!��57 �7 ,�7 *�=�$0!$) 6"%$5!9$0$07 ,&=�$'3�5$ 0(1+�37 �#=�� $3(7 9�1"0 �"(7 --=

��17 �7 ,�="))�!��57 �7 ,�=)�4�0��57 ,�=123!�63� "!��57 ,�7 -�=0$ �5)��%)$%7 ,�=

���0( )"!"7 *,=��5��2 3�)$"5 <$�1$!%(7 �,>�*7 /-=��� �+�!'�0$ �163$1$5!"!��5�7 �=��!"!��5"3 �54$5!��507 47 .�=����� �1$)�"5 �; !9%$$�7 4=���� �!%"50�!�4$ 3�02%$�7 �-=V� �% � �+�!'�0$ �163$1$5!�7 �=�� �02Æ: 6"%�!(�7 ,,=� W � �+�!'�0$ ��/�7 �=� � �+�!'�0$ ���7 �=� � � �+�!'�0$ 1���7 �=� � � �+�!'�0$ 3$;! 09�;!�7 �=� � �+�!'�0$ %�<9! 09�;!�7 �=� � � �?�66$% ;25 !��5�7 ��� S�6=�

=� � �1":����� #��7 47 �#7 �&7 *�7 .�7 /*=

��X �F �� L �� Y V�� �12:�7 *#7 *�=� � � �09$$6�"5)�<�"!0�7 �-7 ,-=

���9"%) 6%�+3$107 ,-=�233 06" $07 *.=���� �5�! :�%�7 -/=�(++3$F � &�+�! @2"5!�!(7 ��7 */=�(6F � ��+�! @2"5!�!(7 ��7 */=

�+C$ !0 �5 �1"<$07 &�=� !"+(!$ �% � !"F � *&�+�! @2"5!�!(7 */=�)) ��+�5" � 521+$% 0(0!$17 /*=�;1"57 �2%� �$!%�4� 9 �#�$��� %���

���� ����7 .&=�1$<" 5$!'�%A ;�% %�2!�5<7 ,*>,-=�5$�!��1"5( 1"66�5<7 �-7 �#=�5$0 �25!�5<7 ��� ��)$'"(0 "))�!��5=�53�5$ "3<�%�!9107 &�>&�7 **=�6$5 +�!1"607 *,=�6!� "3 9"%" !$% %$ �<5�!��57 &#7 *,=�� �+�!'�0$ )�0C25 !��5�7 �>�=�%)�5"3 521+$%07 -�=�%�$5!$) ;�%$0!0 "5) !%$$07 ��7 &�=�%�$5!$) 6"!907 �-=�2!092T$07 ,*7 */=�2!0�)$ �; " 2%4$7 &&=�4$%N�'�5< 1$1�%(7 /�=

�" A$) )"!"7 �6$%"!�5< �57 &7 �/>��7��7 ,/>*#7 *�7 */=

�" A�5< �; )"!"7 &>*7 �*7 ��7 ,&7 */7 .�=�"<$ ;"23!07 ,/=�"3$(7 �"(1�5) �)'"%) �3"5 �9%�0!�69$%7

,&7 -,=�"6")�1�!%��27 �9%�0!�0 �"%�3"�0

�#������������� $������ $���� ���7 /�=�"6$%!7 �$(1�2% �2+%$(7 **=�"%"+�3"07 &&7 **=�"%"33$3 6%� $00�5< �; 02+'�%)07 �/>��7

,/>*�=�"%$5!9$0�0 !%" $07 ,&=

Page 119: The Art of Computer Programming - Bitwise Tricks and Techniques

- ���8 ��� ��������

�"%�!( ;25 !��57 �-7 *�7 -�7 -/=02Æ:7 ,,7 */7 /�=

�"%�!( 6"!!$%507 *->*.=�"%A�57 9�1"0 �"5)"337 --=�"!$5!07 -/7 .�=�"!$%0�57 �� 9"$3 �!$'"%!7 ��7 /#7 /�=�"!!$%5 %$ �<5�!��57 &#=�"!!$%507 0$"% 9�5< ;�%7 �#>��7 *�=�$5!"<%�)7 �*>�/7 *&=�$%$?7 �%"17 ,�=�$%;$ ! 9"09 ;25 !��507 -.=�$%;$ ! 6"%�!( 6"!!$%507 *->*.=�$%;$ ! 092T$07 �*7 ,#7 ,*7 ,-7 */7 .#7 ..=�$%��) 3$5<!97 *�=�$%12!"!��5 1"!%� $07 ,#=�$%12!"!��5 5$!'�%A07 ��>�,7 ,->,.7 .�=�$%12!"!��507

�5)2 $) +( �5)$: )�<�!07 ,*=�; +�!0 '�!9�5 " '�%)7 ��>�-7 �,7 ,#=�; +(!$0 '�!9�5 " '�%)7 ,#=�; !9$ ��")� �5!$<$%07 ,�=�1$<"�%�2!"+3$7 ,*>,-=

�$%6$5)� 23"% 3�5$07 �*=�$!$%0�57 ��33�"1 �$03$(7 ,�=�9� ���7 *&=�� � �7 "0 Z%"5)�1[ $:"163$7 �-=�� A�4$%7 �3�G�%) �3"57 -,=��<$�59�3$ 6%�5 �63$7 �#&=��6$3�5$) 1" 9�5$7 &.>&/=��!!$'"(7 �� 9"$3 �3�() �� !�%7 &,=��:$3 "3<$+%"7 47 &#=��:$3 6"!!$%507 &7 ,�=��:$307 �/>&.7 *&>*.=

<%"(7 ,/7 *-=�I�3("7 �(E�%<( �L �$�%<$�7 -,=��3(5�1�"30 1�)23� �7 ,-=

123!�63� "!��5 �;7 -#=%$1"�5)$%0 �;7 ,-7 *.=

��3(5�1�"30 1�)23� ,7 *#=��623"!��5 �25!7 ��7 ��� ��)$'"(0 "))�!��5=��%!"+�3�!(7 -=��00�+�3�!(7 �5 ��4"32$) 3�<� 7 *�=�%"!!7 �"2<9"5 ��5"3)7 ,&7 ,.7 .�7

.&7 ./7 �#�=�%$B: 6%�+3$17 ��� �2Æ: 6"%�!( ;25 !��5=�%$�%)$% �; 5�)$07 ��>�,=�%$021$7 ��4�5<0!�5$ %4�5<7 ,,=�%�1$ �163� "5!07 *�=�%�1$ 521+$%07 ,7 ,&=�%�5!�5<7 �/=�%��%�!( @2$2$07 �,=�%�! 9"%)7 �"23 �5)%$'7 --=�%�)�5<$%7 �$312!7 -.=�%�<%"1 �25!$%7 �*=�%�C$ !��5 ;25 !��507 /=�%�A�67 �"%"3)7 �#7 ,,=

�2")%"!� ;�%107 &,>&-7 **>*-=�2")!%$$07 .,=

�2"5!�B "!��507 -&7 ./=�2$$5 <%"697 /�=�2� A7 D�5"!9"5 ��%"!��7 ,�7 ,.=�2�3!7 &=

�"+�57 �� 9"$3 �0$% ����� �� ���� �7 .&=�")�: ��7 ,�=�")�: �54$%0��57 *#=�")�: $: 9"5<$ 0�%!7 /�=��� �%"5)�1�" $00 1" 9�5$�7 �*>�-7

*�7 /�=�"109"'7 �(3$ �"%�3)7 ��=�"5)"337 $�!9 �"%�3)7 �#7 ,,=�"5)�1�?$) )"!" 0!%2 !2%$07 -/=�"5<$ 9$ A�5<7 *#=�"5<$ 1�5�121 @2$%( 6%�+3$17 *&=�"5A �; " +�5"%( 1"!%�:7 *.=�"0!$%07 �/7 ��� ��!1"60=�"!��5"3 ��")� 521+$%07 *�=�"(7 ��2�0 �9"%3$07 &#=�"(5"2)��� 9"%)7 ��$%%$7 �#*=�$" 9"+�3�!( 6%�+3$17 �->�.7 ��=�$"%%"5<$"+3$ 5$!'�%A07 ��� �$%12!"!��5

5$!'�%A0=�$ 2%%$5 $ %$3"!��507 .7 �#7 �-7 ,�7 ,,7 *-=�$ 2%0�4$ 6%� $00$07 �,7 �-7 ��7 ,�7 -�7 .&=�$)25)"5! %$6%$0$5!"!��507 �#&=�$N$ !��5 �; +�!07 ��>��7 �,7 ,,7 ,*7 /*7 /-=�$<23"% 3"5<2"<$07 *�=�$�!'�$05$%7 �$�%<$ �"3!$%7 ,,=�$1"�5)$% 1�) ����7 ��=�$1"�5)$% 1�) ��7 &=�$1�4"3 �; +�!07 .=�$63� "!��5 �; +�!07 �-7 ,.7 ..=�$6%$0$5!"!��57

�; <%"6907 �-7 *�=�; 6$%12!"!��507 ,-=�; 0$!0 "0 �5!$<$%07 ��7 �.7 �->�.7

,.7 *�>*�7 -,=�; !9%$$ 0!"!$0 '�!9 !'� +�!07 �.>��7 *�=

�$4$%0"3 �; +�!07 ��>��7 �,7 ,,7 ,*7 /*7 /-=�9�")07 �3$55 �9"%3$07 .&=��<9!�!��3$;! 1�5�1217 /,=��<9!1�0! +�!07 .>�#7 ,&=�� 9)"3$7 ��1�57 �=��A� A�7 �1"0 �$%9"%)7 47 ,,7 -/=���A�5$�<9+�%07 &#=���A'�0$ �55$ !$) �16�5$5!07

&�>&�7 *,>**=��0$5;$3)7 �?%�$3 ������ ������7 &�=��!"!��5 �; 0@2"%$ +�!1"607 *-=��25)�5<7 ��7 .*=

!� "5 �)) 521+$%7 �7 ,/7 .*=�23$% ;25 !��5 ����7 .7 �#7 ��7 �,7 �*7 �.7

��7 ,�7 ,,7 *#7 *&7 -.7 �##=0211$)7 /,=

�253$5<!9 $5 �)�5<7 �##7 ��� ���� �)<$0+$!'$$5 6�:$30=

�250 �; �07 .7 ��7 ��>��7 ,,7 *�=�2!�4�!?7 �$5�07 &#=

Page 120: The Art of Computer Programming - Bitwise Tricks and Techniques

���8 ��� �������� ;

�7 !9$ 3$!!$%7 &.=���7 -&>-,=�" 9$%�7 ���4"55� ��%�3"1�7 �*=���� �0�)$'"(0 "))�!��5�7 /7 �.7 -*7 -.7 -/=�"1$!7 �"5"5 �� � ����7 .,=�"!2%"!$) "))�!��57 /�=�"!2%"!$) 02+!%" !��57 �����520=� "!!$%$) "%�!91$!� 7 �.7 ,.=

"))�!��57 �.7 ,-=09�;!�5<7 ,.=02+!%" !��57 ,.=

� "!!$%�5< +�!07 .�=� 9�$+$%7 �"%2 9 �$5" 9$1

����� ��� ����7 ��=� 93E"N�7 �2)'�<7 /-=� 9%�$66$37 �� 9"%) �%"+!%$$7 �*7 ,�7 .�=�$"37 �"4�)7 �#=�$ �5)��%)$% 3�<� 7 -&>-,=�$ 2%�!( 9�3$07 */=�$<1$5!$) +%�") "0!�5<7 ��� �!%$! 9�5< +�!0=�$<1$5!$) 0�$4$07 --=�$@2$5!�"3 "33� "!��57 /�=��7 !9$ <"1$7 /�=�$!07 %$6%$0$5!$) "0 �5!$<$%07 ��7 �.7

�->�.7 ,.7 *�>*�7 -,=1":�1"3 6%�6$% 02+0$!0 �;7 ,.=

�9")$0 �; <%"(7 *-=�9"33�!7 D$G%$( �2!3"'7 -.=�9$$6�"5)�<�"!0 �6$%"!��57 �->�.7 ,-=�9�7 S9��D�$ D$%%( � �7 .�=�9�;! �50!%2 !��507 �7 �/7 ,�7 *�=

0�<5$)7 &/7 -.=!"+3$ 3��A26 4�"7 ,7 ��7 */7 .,7 ..=

�9�;! 0$!07 �&>�,=�9�%"A"'"7 0"� � �7 /�=�9%�5A�5< �; �1"<$07 &�>&�7 **=�92T$ 5$!'�%A ;�% %�2!�5<7 ,*=��+3�5< 3�5A07 ��7 *�=��+0�57 ��+�57 /�=��)$'"(0 "))�!��57 �7 ��>��7 ,,7 *�7 -/7 /&=

+(!$'�0$7 ��7 ..=;25 !��5 ��7 ��7 �-7 ,,7 -.=0211$)7 ,,7 .�=

��)$'"(0 9$"607 ��7 *�>*&=��$4$ �; �%"!�0!9$5$07 ,7 ,&=��<5$) +�!07 %$6%$0$5!"!��5 �;7 �/7 ,,=��<5$) %�<9! 09�;!07 &/7 -.=��� �0�5<3$ �50!%2 !��57 123!�63$ )"!"�

"% 9�!$ !2%$7 �/=��163( �55$ !$) �16�5$5!07 &�=��5<1"0!$%7 �"4�) �%$($%7 �#,=��:�%$<�0!$% "3<�%�!917 �#�=�CE�0!%"5)7 D�5"0 �%�A7 �#*=�3"5�5"7 �"!!$�7 -&=�3$"!�%7 �"5�$3 ��1�5� "63"57 &7 /.=�3$6�"57 �"4�)7 ��=�1"33$0! $3$1$5! �; " 0$!7 ��=�1$"%�5< +�!0 !� !9$ %�<9!7 .7 ��7 -.=��%!$) )"!"7 ,&=

��%!�5<7 *#7 -,=5$!'�%A0 ;�%7 ,.=

��23$7 �!$69$5 �"%A$7 .-=�6%"<2$7 ��3"5) �$% �4"37 -�=�@2"%�5< " 6�3(5�1�"37 ,-=�@2�5$07 &.7 **7 �#�=�� �09�;! %�<9!7 6%$0$%4�5< !9$ 0�<5�7

�#7 &/7 -*7 -.=��� �09�;! %�<9! 250�<5$)�7 ,7 -.=�!"5;�%) �%"69�"0$7 ��7 ���=�!$$3$7 �2( �$'�07 D%=7 �*7 ,-7 .#7 .�=�!$%5$7 �"2%$5 $7 ���=�!� A1$($%7 �"%%( D�0$697 .�7 .&=�!� A!�57 �%$) �=7 �#�=�!�3B7 D�%<$7 47 �#�=�!�%"<$ "33� "!��57 ��7 ,&7 ,/=�!%" 9$(7 �9%�0!�69$%7 ��=�!%"�<9! 3�5$07 )�<�!�?�5<7 **=�!%$! 9�5< +�!07 ,.7 ..=�!%�5<07 0$"% 9�5< ;�% 06$ �"3 +(!$0 �57 �#=�!%�5< +%�")'�%) 9"�507 *�=�2+ 2+$07 �.7 *�=�2+0$!07 ��7 �->�.7 *�>*�7 -,=

<$5$%"!�5< "337 �.=1":�1"3 6%�6$%7 ,.=

�2+!%" !��57 �7 ,�7 ,/=+(!$'�0$7 ,/7 .-=0"!2%"!$)7 �����520=0 "!!$%$)7 ,.=

�2Æ: 6"%�!( ;25 !��57 ,,7 */7 /�=�21 �; +�!07 ��� ��)$'"(0 "))�!��5=

'$�<9!$)7 ,,=�2%%�<"!$07 �#*=�2%%�25)$)5$00 !%$$7 &�7 **=�2!5$%7 3"207 �#,=�'"66�5< +�!07 ��>�,7 ,,>,*7 �#-=

+$!'$$5 4"%�"+3$07 -�=���� 1$!9�)07 �/>��7 ,/>*�=�E��� �16�3$%7 .,=�'�;!7 D�5"!9"57 �#-=�(3�'7 �$!$% �2)4�< �$C)$337 ��02+<%�267 -&=�(11$!%� ;25 !��507 ���3$"57 *�=�(11$!%� <%�267 -&=�(11$!%� �%)$% �; 5�)$07 ��=

"+3$ 3��A26 +( 09�;!�5<7 ,7 ��7 */7 .,7 ..="%C"57 ��+$%! �5)%$7 ��7 /,=$%5"%( 4$ !�%07 ��=$00$33"!��57 �*7 &-7 *&=$!%"+(!$ �% !$!%"F � ���+�! @2"5!�!(7 */=9�55�5< "5 �1"<$7 &#>&�7 *,=9�160�57 $55$!9 �"5$7 *.=9%$$�%$<�0!$% "3<�%�!917 &,>&.7 **=9%$$�0!"!$ $5 �)�5<07 �.>��7 *�=9%$$�4"32$) 3�<� 7 ��7 *�=�3�5<7 �*7 &-7 *&=�1$7 1�:$)�%")�: %$6%$0$5!"!��5 �;7 *#=� 9$%7 $�!9 ��2<3"07 �7 ,/7 .,=�%20$07 *,7 .-=%"�3�5< ?$%�07 .7 ��� �23$% ;25 !��5=

Page 121: The Art of Computer Programming - Bitwise Tricks and Techniques

= ���8 ��� ��������

%"50)� 9�!�1�20 1$!9�)07 ��� �%�")'�%) �162!"!��50=

%"50�!�4$ 3�02%$7 �-7 ��=%"506�0�5< " #>� 1"!%�:7 �,7 ,*7 *-7 */7 .#=%"506�0$) "33� "!��57 --=%"4$%0"3 �5 6�0!�%)$%7 /,7 �##>�#�=%"4$%0"3 �5 6%$�%)$%7 /&7 �##>�#�=%$"607 -/=%�"5<23"%�?�5< " #>� 1"!%�:7 *.=%� A0 4$%020 !$ 95�@2$07 �7 �#�=%�5�1�"307 ,-=%�63( 3�5A$) !%$$07 /&7 /,7 �##=%2$(6$7 �#�=%2!9 !"+3$07 /7 -#=02A�("1"7 �92C� � �7 /�=2%�5<7 �3"5 �"!9�0�57 �=

1" 9�5$07 /.='�O0 �163$1$5! 5�!"!��57 �7 �*7 -�=(6$0$!!�5<7 �/=

��� ��5�4$%0"3 �9"%" !$% �$!�7 */=�3"17 �!"5�0U3"' �"% �57 /�=

521+$%07 *�=�3!%"6"%"33$3 3�5$07 �*=�5"%( 5�!"!��57 *#=�5+�"0$) %�25)�5<7 ,/7 .*=�5 �16%$00�5< +�!07 ,-=�5)$%N�' 1"0A7 /#=�5<$%7 �!$69$5 �$%+$%!7 �/=�5� �)$7 */=�5�4$%0"3 �9"%" !$% �$!7 */=�56" A�5< �; )"!"7 �7 &>*7 ,-7 .�=�50�<5$) ��")� �5!$<$%07 -�=�50�34"+3$ 6%�+3$107 -,=�66$% 9"3;63"5$7 /-=�66$% "0$ 3$!!$%07 ,/=�%+"57 �$5$4�$ �"'A�507 &#=�%�7 �"%��7 �#,=���.F .�+�! ��� %"50;�%1"!��5

��%1"!7 */=����*F �*�+�! ��� %"50;�%1"!��5

��%1"!7 */=

4"5 �1)$ ��"07 �$!$%7 ��=�"5 �(A7 �9%�0!�69$% D�957 //=�"%�"5 $7 ,-=

�$+3$57 �0'"3)7 &&=�$ !�% 06" $7 +"0�0 ;�%7 -&7 �#*=�$%!$: �4$%07 1�5�1"37 *�=��09A�57 �?� �$9�092" ������ ���� ���7 ��=��!"3$7 �"+��7 �,=�2�33$1�57 D$"5 �!�$55$7 /,=

�")"7 ���!� � �7 -*=�"%%$57 �$5%( �!"53$(7 D%=7 .7 ��7 ��7 �,7

,�7 ,�7 -�7 -.7 .�7 .*7 �#-=�$<5$%7 �$!$% �L �$�)$57 �2!!�3� �$�5�4� 9

L &��'��� ����� �� � ����7 .7 ��=�$�<9!$) 021 �; +�!07 ,,=�$3!$%7 ��%5$3�0 �=7 -&7 -,=�$0!$7 �$�3 �"%%( �"%3$7 &&=�9$$3$%7 �"4�) D�957 ��=�9�!$ 6�:$307 &7 &#7 *-=��3A$07 �"2%� $ ��5 $5!7 ��=��33"%)7 �"5 �)'"%)7 ��7 *#=��30�57 �"4�) �9�!"A$%7 /�=��3;%"17 �!$69$57 �#*=��5<7 �9"A� 2$5 � �7 �-7 ,.=���)%217 �2!9$% D"(7 --=���)07 ��5"3) ��(7 .,=�%"6"%�25) 6"%�!( 6"!!$%507 *-=�25)$%3� 97 �9"%3$0 �"%4�57 /�=�()$F � �*�+�! @2"5!�!(7 */=

8��, <"1$7 �#,=1�� �+�!'�0$ $: 320�4$ �%�7 �=

�)$5!�!�$0 �54�34�5<7 �7 ,�7 ,,7 -,=

�"55"A"A�07 ��9"3�0 ������ ����!�% ����7 /�=

S �%)$%7 ��� S�6=S$%���5$ 6%�5 �63$7 ,&=S$%���%�0$! �50!%2 !��507 /7 �#7 ..=S$!" ;25 !��57 -.=S�C30!%"7 �%�A7 ��=S�11$%1"557 �"23 ��5 $5! �"%�$7 .�=S�67 !9$ ?�66$% ;25 !��57 �*7 ,#7 ,-7

**7 --7 .#7 .�7 .,=S�6�;"0!$5$% 1$!9�)7 .,=���� �?$%� �% 0$! �; 5�5?$%��7 �#7 ..=��� �?$%� �% 0$! �; ?$%��7 /=

Page 122: The Art of Computer Programming - Bitwise Tricks and Techniques

��� ���������

�� �� �� � � �� �� �� �� �� �� � �! �" �� �#

��$ % & ' ( ) * + , - . / 0 1 2 3 ��$

�$ � � � � � � � � 4 5 6 7 8 9 �$

� $ : � � � � � � ; � < = > � � � � $

��$ ? @ � � A � B C � D � E F G H I ��$

��$ J � ! " � # K L M N O P � � � ��$

��$ Q R S T U V W X $ Y Z [ \ ] ^ ��$

�� �� �� � � �� �� �� �� �� �� � �! �" �� �#

���� ������� �����

�� �� �� � � �� �� ��

A��? 6 ��? 6 �� 6 �@> 6 ��� �6 �� �6 ��� �6 ��� �6��$ ��$

>�AE�G �6 >�A�E�G �6 �>�AE�G �6 �>�A�E�G �6

��> �6 ��?� �6 ��� 6 �@>� �6 ��B ��6 �@�A ��6 ��� �6 ��A �6��$ ��$

��>E�G ��6 ��>�E�G ��6 ��BE�G ��6 ��B�E�G ��6

���E�G 6 ����E�G 6 ���E�G 6 ����E�G 6��$ ��$

�����E�G 6 ����E�G 6 �����E�G 6 ������E�G 6

��?E�G 6 ��?�E�G 6 ���E�G 6 ����E�G 6�$ �$

�>E�G 6 �>�E�G 6 ��E�G 6 ���E�G 6

��E�G 6�� ��E�G 6�� �?E�G 6�� ���E�G 6��� $ � $

���E�G 6�� ���E�G 6�� ��?E�G 6�� ��BE�G 6��

?��E�G 6�� ?��E�G 6�� ?�?E�G 6�� ?���E�G 6����$ ��$

?���E�G 6�� ?���E�G 6�� ?��?E�G 6�� ?��BE�G 6��

���E�G 6 ���E�G 6 ��?E�G 6 ����E�G 6��$ ��$

����E�G 6 ����E�G 6 ���?E�G 6 ���BE�G 6

���E�G 6 ���E�G 6 ��?E�G 6 ����E�G 6��$ ��$

����E�G 6 ����E�G 6 ���?E�G 6 ���BE�G 6

>��E�G 7�6 >���E�G 7�6 >�CE�G 7�6 >�C�E�G 7�6��$ ��$

>�AE�G 7�6 >�A�E�G 7�6 >��E�G 7�6 >���E�G 7�6

>��E�G 7�6 >�;AE�G 7�6 ��C�?E�G �7��6 >����E�G 7�6��$ ��$

>�BA�E�G 6 ?��>�E�G 6 ?����E�G 6 ��E�G 6

�A�E�G 7�6 �A��E�G 7�6 �ACE�G 7�6 �AC�E�G 7�6��$ ��$

�AAE�G 7�6 �AA�E�G 7�6 �A�E�G 7�6 �A��E�G 7�6

�A�E�G 7�6 �A;AE�G 7�6 �A��E�G 7�6 �A���E�G 7�6��$ ��$

�D���E�G 6 ?���AE�G 6 �D����E�G 6 ?��;��E�G 6

��E�G 6 ���E�G 6 ���E�G 6 ���E�G 6��$ ��$

���E�G 6 ����E�G 6 ����E�G 6 ����E�G 6

���E�G 6 C��E�G 6 A��E�G 6 ���E�G 6��$ ��$

���E�G 6 ����E�G 6 ���E�G 6 ����E�G 6

��A; 6 ��A�; 6 ��A�> 6 ��A> 6 ���; 6 ����; 6 ����> 6 ���> 6��$ ��$

��; 6 ���; 6 ���> 6 ��> 6 ����; 6 �����; 6 �����> 6 ����> 6

<�?E�G 6 ?��;<E�G 6 ��A�E�G 6 ?�AE�G 6�$ �$

?�? 6 ������ 6 E��G��B� ��7�6 �D�� 6 �CD� 6 ��A 6 A��? 6

�� �� �� �� �� �� �� �

L �� �; !9$ +%"5 9 �0 !"A$57 L # �; !9$ +%"5 9 �0 5�! !"A$5