Next: , Previous: Rounding Operations, Up: Numbers   [Contents][Index]


3.8 À°¿ô¤Î¥Ó¥Ã¥È±é»»

·×»»µ¡ÆâÉô¤Ç¤Ï¡¢À°¿ô¤Ï2¿Ê¿ô¡¢¤Ä¤Þ¤ê¡¢ ¥Ó¥Ã¥È¡Êbit¡¢³Æ·å¤Ï0¤«1¡ËÎó¤Çɽ¸½¤µ¤ì¤Þ¤¹¡£ ¥Ó¥Ã¥È±é»»¤Ï¡¢¤½¤Î¤è¤¦¤Ê¥Ó¥Ã¥ÈÎó¤Î³Æ¥Ó¥Ã¥È¤´¤È¤ËºîÍѤ·¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¡¢¥·¥Õ¥È¡Êshifting¡Ë¤Ï¡¢¥Ó¥Ã¥ÈÎó¤òÁ´ÂΤȤ·¤Æº¸¤ä±¦¤Ë 1·å°Ê¾å°Üư¤·¤Æ¡¢¤½¤Î¡Ø°Üư¸å¤Î¡Ù¥Ñ¥¿¡¼¥ó¤ò·ë²Ì¤È¤·¤Þ¤¹¡£

Emacs Lisp¤Ë¤ª¤±¤ë¥Ó¥Ã¥È±é»»¤ÏÀ°¿ô¤Ë¸Â¤ê¤Þ¤¹¡£

Function: lsh integer1 count

ÏÀÍý¥·¥Õ¥È¡Êlogical shift¡Ë¤Îά¤«¤é¤­¤Æ¤¤¤ëlsh¤Ï¡¢ integer1¤Î¥Ó¥Ã¥ÈÎó¤òcount·åº¸¤Ø¡¢ ¤¢¤ë¤¤¤Ï¡¢count¤¬Éé¤Ê¤é¤Ð±¦¤Ø¤º¤é¤·¡¢¶õ¤¤¤¿¥Ó¥Ã¥È¤Ë¤Ï0¤òµÍ¤á¤ë¡£ count¤¬Éé¤Ç¤¢¤ì¤Ð¡¢lsh¤ÏºÇº¸¡ÊºÇ¾å°Ì¡Ë¥Ó¥Ã¥È¤Ë0¤òµÍ¤á¡¢ integer1¤¬Éé¤Ç¤¢¤Ã¤Æ¤â·ë²Ì¤ÏÀµ¤Ë¤Ê¤ë¡£ ¤³¤ì¤ÈÂоÈŪ¤Ê¤Î¤¬²¼¤Îash¡£

lsh¤ÎÎã¤ò2¤Ä¼¨¤¹¡£ ¥Ó¥Ã¥È¥Ñ¥¿¡¼¥ó¤ò1·åº¸¤Ø¤º¤é¤¹¡£ ¥Ó¥Ã¥È¥Ñ¥¿¡¼¥ó¤Î¾å°Ì¥Ó¥Ã¥È¤Ï¤¹¤Ù¤Æ0¤Ê¤Î¤Ç²¼°Ì8¥Ó¥Ã¥È¤À¤±¤ò¼¨¤¹¡£

(lsh 5 1)
     ⇒ 10
;; 10¿Ê¿ô5¤Ï¡¢ 10¿Ê¿ô10¤Ë¤Ê¤ë
00000101 ⇒ 00001010

(lsh 7 1)
     ⇒ 14
;; 10¿Ê¿ô7¤Ï¡¢10¿Ê¿ô14¤Ë¤Ê¤ë
00000111 ⇒ 00001110

Î㤫¤é¤ï¤«¤ë¤è¤¦¤Ë¡¢¥Ó¥Ã¥È¥Ñ¥¿¡¼¥ó¤ò1·åº¸¤Ø¤º¤é¤¹¤È¡¢ ¤â¤È¤Î¿ôÃͤÎ2Çܤοô¤Ë¤Ê¤ë¡£

¥Ó¥Ã¥È¥Ñ¥¿¡¼¥ó¤ò2·åº¸¤Ø¤º¤é¤¹¤È¡¢¡Ê8¥Ó¥Ã¥ÈŤÎ2¿Ê¿ô¤Ç¤Ï¡Ë¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(lsh 3 2)
     ⇒ 12
;; 10¿Ê¿ô3¤Ï¡¢10¿Ê¿ô12¤Ë¤Ê¤ë
00000011 ⇒ 00001100       

°ìÊý¡¢±¦¤Ø¤º¤é¤¹¤È¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(lsh 6 -1)
     ⇒ 3
;; 10¿Ê¿ô6¤Ï¡¢10¿Ê¿ô3¤Ë¤Ê¤ë
00000110 ⇒ 00000011       
(lsh 5 -1)
     ⇒ 2
;; 10¿Ê¿ô5¤Ï¡¢10¿Ê¿ô2¤Ë¤Ê¤ë
00000101 ⇒ 00000010       

Î㤫¤é¤ï¤«¤ë¤è¤¦¤Ë¡¢¥Ó¥Ã¥È¥Ñ¥¿¡¼¥ó¤ò1·å±¦¤Ø¤º¤é¤¹¤È¡¢ Àµ¤ÎÀ°¿ô¤Î¿ô¤ò2¤Ç½ü¤·¤ÆÀڤ겼¤²¤ë¡£

Emacs Lisp¤Î¤¹¤Ù¤Æ¤Î»»½Ñ´Ø¿ô¤ÈƱÍͤˡ¢ ´Ø¿ôlsh¤Ï·å°î¤ì¡Ê¥ª¡¼¥Ð¥Õ¥í¡¼¡Ë¤ò¸¡ºº¤·¤Ê¤¤¤Î¤Ç¡¢ º¸¤Ø¤º¤é¤¹¤È¾å°Ì¥Ó¥Ã¥È¤ò¼Î¤Æ¤µ¤ê¿ô¤ÎÉ乿¤òÊѤ¨¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ë¡£ ¤¿¤È¤¨¤Ð¡¢28¥Ó¥Ã¥ÈŤη׻»µ¡¤Ç¤Ï¡¢ 134,217,727¤òº¸¤Ø¤º¤é¤¹¤È-2¤Ë¤Ê¤ë¡£

(lsh 134217727 1)          ; º¸¥·¥Õ¥È
     ⇒ -2

28¥Ó¥Ã¥ÈĹ¤Î¼ÂÁõ¤Î2¿Ê¿ô¤Ç¤Ï¡¢°ú¿ô¤Ï¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£

;; 10¿Ê¿ô134,217,727
0111  1111 1111  1111 1111  1111 1111         

¤³¤ì¤òº¸¤Ø¤º¤é¤¹¤È¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë

;; 10¿Ê¿ô-2
1111  1111 1111  1111 1111  1111 1110         
Function: ash integer1 count

ash¡Ê»»½Ñ¥·¥Õ¥È¡Êarithmetic shift¡Ë¡Ë¤Ï¡¢ integer1¤Î¥Ó¥Ã¥È¤òcount·åº¸¤Ø¡¢¤¢¤ë¤¤¤Ï¡¢ count¤¬Éé¤Ê¤é¤Ð±¦¤Ø¤º¤é¤¹¡£

ash¤Ïlsh¤ÈƱ¤¸·ë²Ì¤Ë¤Ê¤ë¤¬¡¢ integer1¤Ècount¤Îξ¼Ô¤¬Éé¤Î¾ì¹ç¤ò½ü¤¯¡£ ¤³¤Î¾ì¹ç¡¢ash¤Ïº¸¤Î¶õ¤¤¤¿¥Ó¥Ã¥È¤Ë¤Ï1¤òÆþ¤ì¤ë¤¬¡¢ lsh¤Ï¤½¤Î¤è¤¦¤Ê¥Ó¥Ã¥È¤Ë¤Ï0¤òÆþ¤ì¤ë¡£

¤·¤¿¤¬¤Ã¤Æ¡¢ash¤Ç¥Ó¥Ã¥È¥Ñ¥¿¡¼¥ó¤ò1·å±¦¤Ø¤º¤é¤¹¤È¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(ash -6 -1) ⇒ -3            
;; 10¿Ê¿ô-6¤Ï¡¢10¿Ê¿ô-3¤Ë¤Ê¤ë
1111  1111 1111  1111 1111  1111 1010
     ⇒ 
1111  1111 1111  1111 1111  1111 1101

ÂоÈŪ¤Ë¡¢lsh¤Ç¥Ó¥Ã¥È¥Ñ¥¿¡¼¥ó¤ò1·å±¦¤Ø¤º¤é¤¹¤È¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ë¡£

(lsh -6 -1) ⇒ 134217725
;; 10¿Ê¿ô-6¤Ï¡¢10¿Ê¿ô134,217,725¤Ë¤Ê¤ë
1111  1111 1111  1111 1111  1111 1010
     ⇒ 
0111  1111 1111  1111 1111  1111 1101

¾¤ÎÎã¤ò°Ê²¼¤Ë¤·¤á¤¹¡£

                   ;               28¥Ó¥Ã¥È2¿ÊÃÍ

(lsh 5 2)          ;   5  =  0000  0000 0000  0000 0000  0000 0101
     ⇒ 20         ;      =  0000  0000 0000  0000 0000  0001 0100
(ash 5 2)
     ⇒ 20
(lsh -5 2)         ;  -5  =  1111  1111 1111  1111 1111  1111 1011
     ⇒ -20        ;      =  1111  1111 1111  1111 1111  1110 1100
(ash -5 2)
     ⇒ -20
(lsh 5 -2)         ;   5  =  0000  0000 0000  0000 0000  0000 0101
     ⇒ 1          ;      =  0000  0000 0000  0000 0000  0000 0001
(ash 5 -2)
     ⇒ 1
(lsh -5 -2)        ;  -5  =  1111  1111 1111  1111 1111  1111 1011
     ⇒ 4194302    ;      =  0011  1111 1111  1111 1111  1111 1110
(ash -5 -2)        ;  -5  =  1111  1111 1111  1111 1111  1111 1011
     ⇒ -2         ;      =  1111  1111 1111  1111 1111  1111 1110
Function: logand &rest ints-or-markers

¤³¤Î´Ø¿ô¤Ï°ú¿ô¤Î¡ØÏÀÍýÀѡ٤òÊÖ¤¹¡£ ¤Ä¤Þ¤ê¡¢¤¹¤Ù¤Æ¤Î°ú¿ô¤ÎnÈÖÌܤΥӥåȤ¬1¤Ç¤¢¤ë¾ì¹ç¤Ë¸Â¤ê¡¢ ·ë²Ì¤ÎnÈÖÌܤΥӥåȤâ1¤Ë¤Ê¤ë¡£

¤¿¤È¤¨¤Ð¡¢4¥Ó¥Ã¥È¤Î2¿Ê¿ô¤Ç¹Í¤¨¤ë¤È¡¢ 13¤È12¤Î¡ØÏÀÍýÀѡ٤Ï12¤Ë¤Ê¤ë¡£ ¤Ä¤Þ¤ê¡¢1101¤Ë1100¤òÁȤ߹ç¤ï¤»¤ë¤È1100¤Ë¤Ê¤ë¡£ ¤É¤Á¤é¤Î2¿Ê¿ô¤âºÇº¸¤Î2¥Ó¥Ã¥È¤Ï1¤Ê¤Î¤Ç¡¢Ìá¤êÃͤκǺ¸¤Î2¥Ó¥Ã¥È¤â1¤Ë¤Ê¤ë¡£ ¤·¤«¤·¡¢ºÇ±¦¤Î2¥Ó¥Ã¥È¤Ï¡¢°ìÊý¤Î°ú¿ô¤Ç¤Ï¤½¤ì¤¾¤ì¤¬0¤Ê¤Î¤Ç¡¢ Ìá¤êÃͤκDZ¦¤Î2¥Ó¥Ã¥È¤â0¤Ë¤Ê¤ë¡£

¤·¤¿¤¬¤Ã¤Æ¡¢¤Ä¤®¤Î¤È¤ª¤ê¡£

(logand 13 12)
     ⇒ 12

logand¤Ë¤Þ¤Ã¤¿¤¯°ú¿ô¤ò»ØÄꤷ¤Ê¤¤¤ÈÃÍ-1¤òÊÖ¤¹¡£ ¤³¤Î¿ô¤Ï2¿Êɽ¸½¤Ç¤Ï¤¹¤Ù¤Æ1¤À¤±¤Ê¤Î¤Ç¡¢ logand¤Î¹±Åù¸µ¤Ç¤¢¤ë¡£ logand¤Ë°ú¿ô¤ò1¤Ä¤À¤±»ØÄꤹ¤ë¤È¤½¤Î°ú¿ô¤òÊÖ¤¹¡£

                   ;                28¥Ó¥Ã¥È2¿ÊÃÍ

(logand 14 13)     ; 14  =  0000  0000 0000  0000 0000  0000 1110
                   ; 13  =  0000  0000 0000  0000 0000  0000 1101
     ⇒ 12         ; 12  =  0000  0000 0000  0000 0000  0000 1100
(logand 14 13 4)   ; 14  =  0000  0000 0000  0000 0000  0000 1110
                   ; 13  =  0000  0000 0000  0000 0000  0000 1101
                   ;  4  =  0000  0000 0000  0000 0000  0000 0100
     ⇒ 4          ;  4  =  0000  0000 0000  0000 0000  0000 0100
(logand)
     ⇒ -1         ; -1  =  1111  1111 1111  1111 1111  1111 1111
Function: logior &rest ints-or-markers

¤³¤Î´Ø¿ô¤Ï°ú¿ô¤Î¡ØÏÀÍýÏ¡٤òÊÖ¤¹¡£ ¤Ä¤Þ¤ê¡¢¾¯¤Ê¤¯¤È¤â¤É¤ì¤«1¤Ä¤Î°ú¿ô¤ÎnÈÖÌܤΥӥåȤ¬1¤Ç¤¢¤ë¾ì¹ç¤Ë¸Â¤ê¡¢ ·ë²Ì¤ÎnÈÖÌܤΥӥåȤâ1¤Ë¤Ê¤ë¡£ °ú¿ô¤ò»ØÄꤷ¤Ê¤¤¤È0¤òÊÖ¤¹¤¬¡¢¤³¤ì¤Ï¤³¤Î±é»»¤Î¹±Åù¸µ¤Ç¤¢¤ë¡£ logior¤Ë°ú¿ô¤ò1¤Ä¤À¤±»ØÄꤹ¤ë¤È¤½¤Î°ú¿ô¤òÊÖ¤¹¡£

                   ;                28¥Ó¥Ã¥È2¿ÊÃÍ

(logior 12 5)      ; 12  =  0000  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000  0000 0000  0000 0000  0000 0101
     ⇒ 13         ; 13  =  0000  0000 0000  0000 0000  0000 1101
(logior 12 5 7)    ; 12  =  0000  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000  0000 0000  0000 0000  0000 0101
                   ;  7  =  0000  0000 0000  0000 0000  0000 0111
     ⇒ 15         ; 15  =  0000  0000 0000  0000 0000  0000 1111
Function: logxor &rest ints-or-markers

¤³¤Î´Ø¿ô¤Ï°ú¿ô¤Î¡ØÇÓ¾ŪÏÀÍýÏ¡٤òÊÖ¤¹¡£ ¤Ä¤Þ¤ê¡¢°ú¿ô¤ÎnÈÖÌܤΥӥåȤ¬1¤Ç¤¢¤ë¤â¤Î¤¬´ñ¿ô¸Ä¤Î¾ì¹ç¤Ë¸Â¤ê¡¢ ·ë²Ì¤ÎnÈÖÌܤΥӥåȤâ1¤Ë¤Ê¤ë¡£ °ú¿ô¤ò»ØÄꤷ¤Ê¤¤¤È0¤òÊÖ¤¹¤¬¡¢¤³¤ì¤Ï¤³¤Î±é»»¤Î¹±Åù¸µ¤Ç¤¢¤ë¡£ logxor¤Ë°ú¿ô¤ò1¤Ä¤À¤±»ØÄꤹ¤ë¤È¤½¤Î°ú¿ô¤òÊÖ¤¹¡£

                   ;               28¥Ó¥Ã¥È2¿ÊÃÍ

(logxor 12 5)      ; 12  =  0000  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000  0000 0000  0000 0000  0000 0101
     ⇒ 9          ;  9  =  0000  0000 0000  0000 0000  0000 1001
(logxor 12 5 7)    ; 12  =  0000  0000 0000  0000 0000  0000 1100
                   ;  5  =  0000  0000 0000  0000 0000  0000 0101
                   ;  7  =  0000  0000 0000  0000 0000  0000 0111
     ⇒ 14         ; 14  =  0000  0000 0000  0000 0000  0000 1110
Function: lognot integer

¤³¤Î´Ø¿ô¤Ï°ú¿ô¤ÎÏÀÍýŪ¤ÊÊä¿ô¤òÊÖ¤¹¡£ ¤Ä¤Þ¤ê¡¢integer¤ÎnÈÖÌܤΥӥåȤ¬0¤Ç¤¢¤ë¾ì¹ç¤Ë¸Â¤ê¡¢ ·ë²Ì¤ÎnÈÖÌܤΥӥåȤÏ1¤Ë¤Ê¤ë¡£

(lognot 5)             
     ⇒ -6
;;  5  =  0000  0000 0000  0000 0000  0000 0101
;; becomes
;; -6  =  1111  1111 1111  1111 1111  1111 1010

Next: , Previous: Rounding Operations, Up: Numbers   [Contents][Index]