找回密码
 点一下
查看: 3622|回复: 8

2进制和10进制的转换函数

[复制链接]
发表于 2006-4-5 10:02:26 | 显示全部楼层 |阅读模式
很久以前做的东西,做出来以后一直没想到有什么用…………
[jass]
//=======================取整===========================================
function R2Z takes real IR returns real
    return I2R( R2I( IR))
endfunction

//=======================10进制转2进制==================================
function Ten2Two takes integer IInt returns integer
    local real TempReal = I2R(IInt)
    local string array OInt
    local integer indexa = 1
    loop
        exitwhen TempReal == 0
        if TempReal/2 - I2R( R2I (TempReal/2)) != 0 then
            set OInt[indexa] = "1"
        else
            set OInt[indexa] = "0"
        endif
        set TempReal = I2R( R2I (TempReal/2))
        set indexa = indexa + 1
    endloop
    set OInt[0] = null
    loop
        exitwhen indexa == 0
        set OInt[0] = OInt[0] + OInt[indexa]
        set indexa = indexa - 1
    endloop
    return S2I(OInt[0])
endfunction

//=======================2进制转10进制==================================
function Two2Ten takes integer IInt returns integer
    local integer count = 0
    local integer OInt = 0
    local integer indexa = 1
    local integer indexb = 0
    loop
        exitwhen indexa > StringLength( I2S(IInt))
        set indexb = 0
        set count = 1
        loop
            exitwhen indexb > indexa - 1
            if indexb == 0 then
                set count = 1
            else
                set count = count * 2
            endif
            set indexb = indexb + 1
        endloop
        set count = S2I( SubStringBJ( I2S(IInt), indexa, indexa)) * count
        set OInt = OInt + count
        set indexa = indexa + 1
    endloop
    return OInt
endfunction[/jass]
发表于 2006-4-5 12:44:06 | 显示全部楼层
Ten2Two

扑通。。。。。。
回复

使用道具 举报

发表于 2006-4-5 12:52:10 | 显示全部楼层
看了一下
似乎没有考虑负数问题
用字符串模拟位运算效率很低



打个小广告:
我写的JassStr中提供了ConvRadix函数来转换任意进制

整数转二进制字符串:
s = ConvRadix(i, 2)

二进制字符串转整数:
i = DecodeRadix(s, 2)

http://bbs.ourga.com/viewthread.php?tid=449
回复

使用道具 举报

发表于 2006-4-5 16:33:46 | 显示全部楼层
http://www.gacn.net/forum/viewth ... &extra=page%3D1
游戏王的迷宫理论里就利用到2进制 如果可以直接调用转化函数的话~判断起来会方便些~~(没仔细看过zyl的函数,不知道在迷宫理论里调用此函数会不会反而增加运算量。。)

ps这个貌似应该移动到算法区~~
回复

使用道具 举报

发表于 2006-4-5 16:48:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2006-4-5 17:27:35 | 显示全部楼层
问这个就像是问学小学数学有什么用一样。

??没用


但是好玩嘛
回复

使用道具 举报

发表于 2006-4-5 17:58:13 | 显示全部楼层
原帖由 illlusion 于 2006-4-5 16:33 发表
http://www.gacn.net/forum/viewth ... &extra=page%3D1
游戏王的迷宫理论里就利用到2进制 如果可以直接调用转化函数的话~判断起来会方便些~~(没仔细看过zyl的函数,不知道在迷宫理论 ...



如果只是显示二进制字符串,用以上的函数
如果是要做二进制运算,那么直接用乘除模拟移位,这样效率才高

x << n = x * 2^n
x >> n = x / 2^n

注意2^n代表 2的n次幂

这样写只是为了好理解,实际写代码时应该用计算好的常数:
x << 23 = x * 0x800000
x >> 23 = x / 0x800000
回复

使用道具 举报

 楼主| 发表于 2006-4-5 20:14:37 | 显示全部楼层
大概一年半以前写的东西,当时也忘记写来做什么了,似乎什么也没做,不过可以确认当时写这个的时候似乎不需要和负数沾边也就没有考虑。今天翻地图的时候找到的,就顺手发上来,没有注意到ZYL写过任意进制的转换,不好意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-21 23:03 , Processed in 0.033416 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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