[求助]:[1227]请问logand与logior两命令的涵义与用法?
<P><BR>[求助]:请问logand与logior两命令的涵义与用法?</P><P>看书上这样写...<BR>===========================================================<BR>logand (logand integer integer . . .)<BR>>>对诸integer参数作位元的逻辑and运算,传回其结果值。</P>
<P>(logand 7 15 3) -> 3<BR>(logand 8 3 4) -> 0<BR>===========================================================<BR>logior <BR>>>对诸integer参数作位元的逻辑or运算,传回其结果值。</P>
<P>(logior 1 2 4) -> 7<BR>(logior 9 3) -> 11<BR>===========================================================<BR>但不明白何谓"位元的逻辑and运算"与"位元的逻辑or运算"</P>
<P>尤其是执行后的过程更无法理解</P>
<P>烦请各位高手可以解答一下<BR>谢谢<BR></P> <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> <p>谢谢您的解答,所以意思就是</p><p>logand "位元的逻辑and运算" => 保留相同的十进位数值并相加</p><p>logior "位元的逻辑or运算" = > 删除相同的十进位数值并相加<br/></p><p>这样理解对吗?</p><p></p><p></p> ; 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)
)
大家看看,李麦克的用法,是什么讲究? 请问版主这样的函数有什么意义呢? 本帖最后由 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 "端点和中点捕捉都已打开"))
) 不错,又学了一招logand
logior用法
。。。。 总算有点眉目了。 谢谢caoyin版主的解答,这个2个函数一直没理解,今天算是明白了 收藏。。。。。。 学习了!!!!
页:
[1]
2