V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wsds
V2EX  ›  程序员

想请教一下各位,关于进制转换问题

  •  
  •   wsds · 2018-04-17 09:04:53 +08:00 · 1955 次点击
    这是一个创建于 2411 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对于进制转换这个,一直懵懵懂懂的,只知道十进制转二进制是用除法取余数(笔算),但我看其他人转的时候,都是用口算的,而且不论数的大小,一分钟以内就算出来了,请问下是有什么诀窍吗?
    二进制转十进制是取当前位 2 的多次次方的和,我也得笔记,有什么快捷的换算办法吗
    9 条回复    2018-04-17 18:16:15 +08:00
    vegito2002
        1
    vegito2002  
       2018-04-17 09:11:03 +08:00 via iPad
    2^10 约等于 1000, 然后用这个跟 10 进制大部分都能估计个差不多了; 2^(10 以内)的基本上用多了就知道了;
    ThirdFlame
        2
    ThirdFlame  
       2018-04-17 09:20:57 +08:00
    2 的 10 次方 1024
    2 的 8 次方 256
    2 的 4 次方 16
    用多了 这些不就记住了。 剩下的就是就是拼拼凑凑 肯定了
    jinhan13789991
        3
    jinhan13789991  
       2018-04-17 09:38:48 +08:00
    同求方法,还有位运算,脑子浆糊一样
    zyp0921
        4
    zyp0921  
       2018-04-17 09:52:45 +08:00
    熟能生巧
    MCVector
        5
    MCVector  
       2018-04-17 10:00:17 +08:00 via Android
    十六进制换二进制随意换。十进制要慢多了。应该是用的多了就记住了,各种 unsinged 数据类型上限或者是常用的 bit field.
    locktionc
        6
    locktionc  
       2018-04-17 10:29:30 +08:00
    二进制转八进制,三位一组,高位不足三位补 0,1011011101 -> 001, 011, 011, 101->八进制 1335
    八进制转二进制,一个数对应三位二进制位。例如 1335, 1-> 001, 3-> 011, 5 -> 101 拼起来就是 001011011101
    二进制转十六进制,四位一组,高位不足四位补 0,1011011101-> 0010, 1101,1101->0x2(13)(13)->0x2dd
    十六进制转二进制,一个数对应四位二进制数。例如 0x2dd,2-> 0010, d - > 1101, 拼起来就是 001011011101

    十进制转二进制,记范围,例如 1283,1024 < 1283 < 2018 所以有 11 位,由于是奇数,所以末尾必为 1,所以是 1xxxxxxxxx1。1283 - 1024 = 259,由于 256 < 259 < 512,所以第 9 位必为 1,因此 1283 对应了 101xxxxxxx1。继续减,259 - 256 = 3 = 2^1 + 1,所以末尾必为 11,那么第 4 位到倒数第 3 位全为 0,所以结果为:10100000011
    xwyam
        7
    xwyam  
       2018-04-17 10:37:08 +08:00 via Android
    把 2 的 16 次方之前的数都背下来是可行的
    另外,记一些特殊常用的,比如 192,168,384,768 这些,还有 ascii 里 48,65,97 这些
    vincenttone
        8
    vincenttone  
       2018-04-17 15:32:15 +08:00
    如果是一头驴单掌数数的话,就是 2 进制啦。
    一个人双手数数的时候,也是一样的。
    超过 10 个手指(或者驴的单掌手指数),就需要脑子里有个计数器记录一下数了几遍了,这个操作就加上了基础数值。

    至于快速换算,可以考虑记录每一位的数字,[..., 256, 128, 64, 32, 16, 8, 4, 2, 1]
    比如我说 64 转换 2 进制 >>> 1000000,只需要 64 所在的位置置 1,其他置 0。
    65 >>> 1000001,65 取 64 余,剩下 1,对应位置置 1。
    至于每一位如何记忆
    1.一般 8421 之类的好记,需要的时候不停的乘 2 就可以知道了
    2.而且大概 2 的乘方也是知道的,比如 1024、2048 之类的,给你一个 4111,明显就是 4096 附近,做个差 4111 - 4096 = 15,然后 15 下面就是 8 了,然后重复,421 一起是 7,于是 [4096:1, 2048:0, 1024:0, 512:0, 256:0, 128:0, 64:0, 32:0, 16:0, 8:1, 4:1, 2:1, 1:1 ] >>> 1000000001111
    3. 命令行用 python ( linux 自带)、ruby ( mac 自带)直接转换就可以
    sampeng
        9
    sampeng  
       2018-04-17 18:16:15 +08:00
    电脑自带的计算器了解一下。。。
    不是特别明白背得这些数字的实际价值在哪里。。。炫技的一种?
    另外。。如果 lz 你一天写几十次进制转换,或者掉进制转换的坑里。。。想忘都难
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   971 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.