vken7az2p 发表于 2006-12-27 22:35:00

[求助]:[1227]请问logand与logior两命令的涵义与用法?

<P><BR>[求助]:请问logand与logior两命令的涵义与用法?</P>
<P>看书上这样写...<BR>===========================================================<BR>logand (logand integer integer . . .)<BR>&gt;&gt;对诸integer参数作位元的逻辑and运算,传回其结果值。</P>
<P>(logand 7 15 3) -&gt; 3<BR>(logand 8 3 4) -&gt; 0<BR>===========================================================<BR>logior <BR>&gt;&gt;对诸integer参数作位元的逻辑or运算,传回其结果值。</P>
<P>(logior 1 2 4) -&gt; 7<BR>(logior 9 3) -&gt; 11<BR>===========================================================<BR>但不明白何谓"位元的逻辑and运算"与"位元的逻辑or运算"</P>
<P>尤其是执行后的过程更无法理解</P>
<P>烦请各位高手可以解答一下<BR>谢谢<BR></P>

mccad 发表于 2006-12-27 22:50:00

<p>其实就是二进制的运算判断:</p><p>位元,也称位码,在十进制中是这样的数字:</p><p>1,2,4,8,16,32,64,128,256,...</p><p>对应二进制应该就是</p><p>1,10,100,1000,10000,10000,...</p><p>(logand 7 15 3):</p><p>7=1+2+4<br/>15=1+2+4+8<br/>3=1+2<br/>其中都有1+2,所以就是3</p><p>(logand 8 3 4)</p><p>8=8<br/>3=1+2<br/>4=4<br/>没有相同的,所以为0</p><p>(logior 1 2 4)</p><p>1+2+4=7</p><p>(logior 9 3)<br/>9=1+8<br/>1+8+3=11</p>

vken7az2p 发表于 2006-12-28 06:15:00

<p>谢谢您的解答,所以意思就是</p><p>logand "位元的逻辑and运算" =&gt; 保留相同的十进位数值并相加</p><p>logior "位元的逻辑or运算" = &gt; 删除相同的十进位数值并相加<br/></p><p>这样理解对吗?</p><p></p><p></p>

yjtdkj 发表于 2021-6-24 16:17:52

; a way to find a closed polyline by point inside
;Lee Mac
(defun polyfrominsidepoint (p / e i r s)
(if
    (setq i -1
          s
          (ssget "_X"
                   (list '(0 . "LWPOLYLINE")
                       '(-4 . "&=")
                       '(70 . 1)
                       (if (= 1 (getvar 'cvport))
                           (cons 410 (getvar 'ctab))
                           '(410 . "Model")
                       )
                   )
          )
    )
   (while (and (null r) (setq e (ssname s (setq i (1+ i)))))
       (if (raycast p
                  (mapcar 'cdr
                          (vl-remove-if-not '(lambda (x) (= 10 (car x)))
                                              (entget e)
                          )
                  )
           )
       (setq r e)
       )
   )
)
r
)
(defun raycast (p l)
(= 1
   (logand 1
             (length
             (vl-remove 'nil
                          (mapcar
                          '(lambda (a b)
                             (inters p (mapcar '+ p '(1e8 0.0)) a b)
                             )
                          (cons (last l) l)
                          l
                          )
             )
             )
   )
)
)
(defun c:SelPolylinebyPoint (/ e p)
(if (setq p (getpoint "\nSpecify point: "))
    (if        (setq e (polyfrominsidepoint p))
      (sssetfirst nil (ssadd e))
      (princ "\nNo polyline found.")
    )
)
(princ)
)
大家看看,李麦克的用法,是什么讲究?

chengx2000 发表于 2011-6-8 21:25:43

请问版主这样的函数有什么意义呢?

caoyin 发表于 2011-6-8 22:03:43

本帖最后由 caoyin 于 2011-6-8 22:04 编辑

例如分别用两个函数判断当前OSMODE的端点和中点捕捉是否打开:
1.logand
(setq X (logand (getvar 'osmode) 3))
(cond
((= X 0) (alert "端点和中点捕捉都未打开"))
((= X 1) (alert "端点捕捉已打开"))
((= X 2) (alert "中点捕捉已打开"))
((= X 3) (alert "端点和中点捕捉都已打开"))
)
2:logior
(setq OS (getvar 'osmode) X (- (logior OS 3) OS))
(cond
((= X 3) (alert "端点和中点捕捉都未打开"))
((= X 2) (alert "中点捕捉未打开"))
((= X 1) (alert "端点捕捉未打开"))
((= X 0) (alert "端点和中点捕捉都已打开"))
)

zhb236623 发表于 2011-6-8 23:23:02

不错,又学了一招logand
logior用法
。。。。

198526 发表于 2011-6-16 16:02:30

总算有点眉目了。

skynoon 发表于 2011-6-16 22:57:16

谢谢caoyin版主的解答,这个2个函数一直没理解,今天算是明白了

wowan1314 发表于 2012-5-4 19:40:34

收藏。。。。。。

vlisp2012 发表于 2012-5-4 19:43:57

学习了!!!!
页: [1] 2
查看完整版本: [求助]:[1227]请问logand与logior两命令的涵义与用法?