马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
C++的移位操作
https://www.cnblogs.com/linkenpark/p/10935226.html
用 Autolisp 翻译如下:
转二进制

- (defun tobin (n / l i str)
- (setq i 0
- str ""
- )
- (while (< i 32)
- (setq l (logand n (lsh 1 (- 31 i)))
- l (lsh l (- i 31))
- str (strcat str
- (if (zerop l)
- "0"
- "1"
- )
- )
- i (1+ i)
- )
- )
- str
- )
十进制整数转十六进制

- (defun tohex (n / str i l )
- (if (> n 65535)
- (setq str "0x"
- i 0
- )
- (setq str ""
- i 4
- )
- )
- (while (< i 8)
- (setq l (lsh (lsh n (* 4 i)) -28)
- l (if (>= l 0)
- l
- (+ l 16)
- )
- str (strcat str
- (chr (if (< l 10)
- (+ l 48)
- (+ l 55)
- )
- )
- )
- i (1+ i)
- )
- )
- str
- )
Autolisp 中的逻辑运算包括 logand logior lsh,其中
logand 等同于 C/C++ 中的 & (and 与)
logior 等同于 C /C++ 中的 | (or 或)
lsh 就是 C/C++ 中的 >> 和 << ,如果numbits为正,int将向左移动;如果numbits为负,int将向右移动。在这两种情况下,零位被移入,移出的位被丢弃。
|