明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2013|回复: 8

[越飞越高] 十进制转二进制

[复制链接]
发表于 2014-12-12 19:33 | 显示全部楼层 |阅读模式
(defun sr (str)
  (setq strlst (mapcar '(lambda (x) (- x 48)) (vl-string->list str)))
  strlst
)
(defun ften->bin (lst)
    (setq blst nil binstr nil)
    (while (apply 'or (mapcar '(lambda (x) (/= x 0)) lst ))
             (setq flag 0)
             (setq lst (mapcar '(lambda (x)
                                    (setq z (/ (+ (* flag 10) x) 2))
                                    (setq flag (rem (+ (* flag 10) x) 2))
                                       z
                                 )
                            lst
                        )
              )
              (setq blst (cons flag blst))
    )
    (setq binstr (apply 'strcat (mapcar '(lambda (x) (itoa x)) blst)))
    binstr
)
(ften->bin (sr (getstring "请输入十进制数n=")))

发表于 2014-12-12 22:38 | 显示全部楼层
用在哪方面啊?
 楼主| 发表于 2014-12-13 18:23 | 显示全部楼层
434939575 发表于 2014-12-12 22:38
用在哪方面啊?

二进制的用处很多啊,举个简单的,用加法来实现乘法就用到二进制。
发表于 2015-12-19 08:46 | 显示全部楼层
  1. (defun sr (str)
  2.   (setq strlst (mapcar '(lambda (x) (- x 48)) (vl-string->list str)))
  3.   strlst
  4. )
  5. (defun ften->bin (lst)
  6.     (setq blst nil binstr nil)
  7.     (while (apply 'or (mapcar '(lambda (x) (/= x 0)) lst ))
  8.              (setq flag 0)
  9.              (setq lst (mapcar '(lambda (x)
  10.                                     (setq z (/ (+ (* flag 10) x) 2))
  11.                                     (setq flag (rem (+ (* flag 10) x) 2))
  12.                                        z
  13.                                  )
  14.                             lst
  15.                         )
  16.               )
  17.               (setq blst (cons flag blst))
  18.     )
  19.     (setq binstr (apply 'strcat (mapcar '(lambda (x) (itoa x)) blst)))
  20.     binstr
  21. )
  22. (ften->bin (sr (getstring "请输入十进制数n=")))
;能否用于幂计算十进制转二进制
发表于 2017-10-25 19:50 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
发表于 2018-4-2 02:59 | 显示全部楼层
搜了一下进制转换,就发现这一个帖子,就是转换效率有点惨不忍睹。
 楼主| 发表于 2018-4-9 16:26 | 显示全部楼层
本帖最后由 mahuan1279 于 2018-4-9 16:27 编辑
yxp 发表于 2018-4-2 02:59
搜了一下进制转换,就发现这一个帖子,就是转换效率有点惨不忍睹。

不知你的数据是什么?会导致惨不忍睹的效果?
发表于 2018-4-10 10:01 | 显示全部楼层
本帖最后由 yxp 于 2018-4-10 10:04 编辑

BASE64码的转换时,需要对二进制数据操作,贴一个我的转换程序
  1. ;;十进制转换为二进制
  2. (defun d2b(i / s)
  3. (while(> i 0)(setq s (cons(logand i 1) s) i (lsh i -1)))s
  4. )

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

 楼主| 发表于 2018-4-10 11:16 | 显示全部楼层
yxp 发表于 2018-4-10 10:01
BASE64码的转换时,需要对二进制数据操作,贴一个我的转换程序

移位和逻辑运算效率的确很高,但1秒和0.01秒在视觉上没什么区别,谈不上惨不忍睹吧。我只是想对任意输入数值都可转换,你的数据超过22亿就不行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 19:00 , Processed in 0.294332 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表