免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7182 | 回复: 11

[估计是原创]10进制转换为2进制, 纯bash, 非短除法 [复制链接]

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
发表于 2011-12-09 18:30 |显示全部楼层
另行注明, 因为之前搜过没找到. 所以有了此文.
只有bc转的.
但我的msys又没有bc.

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2011-12-09 18:37 |显示全部楼层

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
发表于 2011-12-09 18:44 |显示全部楼层
Shell_HAT 发表于 2011-12-09 18:37



    版主, 这是纯bash实现的, 没有调用其他非bash功能, 算不得重复吧.
非bash的, 我会bc.

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
发表于 2011-12-09 19:00 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
射手座
日期:2014-03-10 14:24:52
发表于 2011-12-09 19:15 |显示全部楼层
支持原创。

论坛徽章:
0
发表于 2011-12-09 21:57 |显示全部楼层
这个要支持一下

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2011-12-10 11:34 |显示全部楼层
本帖最后由 jason680 于 2011-12-10 11:44 编辑

回复 1# 惟吾无为

我也来一个"纯"bash...
  1. #! /bin/bash
  2. dec2bin(){
  3.   val=$1
  4.   local base=$2
  5.   [ $val -eq 0 ] && bin=0

  6.   if [ $val -ge $base ]; then
  7.     dec2bin $val $((base*2))
  8.     if [ $val -ge $base ]; then
  9.       val=$(($val-$base))
  10.       bin=${bin}1
  11.     else
  12.       bin=${bin}0
  13.     fi
  14.   fi
  15.   [ $base -eq 1 ] && echo $bin
  16. }

  17. dec2bin $1 1
复制代码
$ ./utob 128
10000000

$ ./utob 255
11111111

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
发表于 2011-12-10 12:04 |显示全部楼层
本帖最后由 惟吾无为 于 2011-12-10 12:05 编辑

回复 8# jason680


    哦, 看明白了. 长见识了.
递减取差.
我不敢用递归函数, 不熟.

我只不过发现一个简便的方法而已. 有些取巧.

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2011-12-10 14:02 |显示全部楼层
回复 9# 惟吾无为

进版..可自设 N进制
  1. #! /bin/bash
  2. Num=(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z)
  3. dec2n(){
  4.   val=$1
  5.   base=${2:-2}
  6.   local N=${3:-1}
  7.   [ $val -eq 0 ] && ans=0

  8.   if [ $val -ge $N ]; then
  9.     dec2n $val $base $((base*N))
  10.     cnt=0
  11.     while [ $val -ge $N ]
  12.     do
  13.       val=$(($val-$N))
  14.       cnt=$((cnt+1))
  15.     done
  16.     ans=$ans${Num[$cnt]}
  17.   fi
  18.   [ $N -eq 1 ] && echo $ans
  19. }

  20. dec2n $1 ${2:-2}
复制代码
$ ./utob 64 16
40

$ ./utob 64 2
1000000

$ ./utob 64 4
1000

$ ./utob 64 12
54

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-12-10 18:51 |显示全部楼层
那么,比如我想把
1232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
转换成3进制呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP