那些能手写各种排序的人能手写数的补码吗?比如 -1.234 的补码。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
m30102
V2EX    职场话题

那些能手写各种排序的人能手写数的补码吗?比如 -1.234 的补码。

  •  
  •   m30102 2020 年 9 月 25 日 4301 次点击
    这是一个创建于 1934 天前的主题,其中的信息可能已经有所发展或是发生改变。
    23 条回复    2020-09-26 13:53:51 +08:00
    whileFalse
        1
    whileFalse  
       2020 年 9 月 25 日
    这是一回事儿吗?
    m30102
        2
    m30102  
    OP
       2020 年 9 月 25 日
    @whileFalse 都是基础啊
    zackwu
        3
    zackwu  
       2020 年 9 月 25 日
    浮点数哪来的补码?楼主水平堪忧。
    yogogo
        4
    yogogo  
       2020 年 9 月 25 日
    钓鱼也不用这样钓啊~
    luckyrayyy
        5
    luckyrayyy  
       2020 年 9 月 25 日   11
    不能用针在光盘上戳个 linux 内核出来的,一律认定为基础不行。
    m30102
        6
    m30102  
    OP
       2020 年 9 月 25 日   1
    @keith1126 不带我定点小数玩了?
    bnrwnjyw
        7
    bnrwnjyw  
       2020 年 9 月 25 日
    楼主是不是被喷过啊?报复性提问?
    mazyi
        8
    mazyi  
    PRO
       2020 年 9 月 25 日 via iPhone
    我来问个基础,你是谁?
    yazinnnn
        9
    yazinnnn  
       2020 年 9 月 25 日
    你从哪来?要到哪去?
    raaaaaar
        10
    raaaaaar  
       2020 年 9 月 25 日 via Android   4
    我们学这些东西,不是做一个什么都纯的硬盘,而是纯它们的缓存,有一个快速的索引。

    就你举的这个例子,除了那些要考试,要面试的,或者打竞赛的人,没有人天天去刷什么排序的哪一步是怎么样的。但是你一说排序,我们就知道排序是什么东西,大概有哪些排序,他们的原理大概是怎么样的,他们的时间复杂度是怎么样的,在某个场景时,我们也能去分析用什么算法,而不是马上打开 IDE 就开始写代码,这种情况在工程中几乎不可能存在,要写我们也会网上查,去笔记中找。

    什么补码就更是如此,我们学这个不是让你拿个数字就能开始算,而是知道,补码是个什么东西?它用在什么地方,为什么要有这个东西?它大概是个什么思路?诸如此类。
    yuruizhe
        11
    yuruizhe  
       2020 年 9 月 25 日
    @keith1126 我记得课本上教的是 IEEE754 标准,分为底数和基数,好像两者中确实有一个用补码表示的
    shilyx
        12
    shilyx  
       2020 年 9 月 25 日
    能用勺子吃米饭的人,能精确的知道每一勺子有多少米饭粒吗?
    m30102
        13
    m30102  
    OP
       2020 年 9 月 25 日
    @raaaaaar 是啊,但面试没答出来就算不会,答出来了 过段时间又忘,这样不是瞎折腾么?
    icyalala
        14
    icyalala  
       2020 年 9 月 25 日   10
    假设楼主不是来钓鱼的吧。。
    浮点数一般是按 IEEE 754 二进制来表示的,没有什么补码的概念,正负就是最高位的 1bit 。
    至于将字符串解析为 IEEE 754 二进制,不用说手写了,用代码转换都复杂得很,java 、php 、glibc 甚至编译器都有过各种 bug: https://www.exploringbinary.com/topics/#correctly-rounded-decimal-to-floating-point

    想了解的话可以看一下这个算法: https://www.ampl.com/netlib/fp/dtoa.c 苹果的 iOS macOS 用的就是这份代码。

    具体到 1.234 这个数,如果用手算的话,就是 1234 / 1000,转换为二进制,再进行大整数计算,得到的是一个无限长度的二进制小数:
    1.001110111110011101101100100010110100001110010101100000010000011000100100110111010010111100011010100111111011111001110110...

    这里 54 bit 是 0,则向下舍入,得到二进制:
    1.0011101111100111011011001000101101000011100101011

    转为 IEEE 754 表示,最高位 1 表示负数,后面 11 位是 exp 0,加上 1023 bias 就是 01111111111,
    最后 52 位就是上面的二进制,隐藏高位 1,合起来就是:
    1 01111111111 0011101111100111011011001000101101000011100101011000

    用 hex 表示就是
    0xbff3be76c8b43958

    我们可以再实际验证一下:
    uint64_t p = 0xbff3be76c8b43958ull;
    double d = *(double *)&p;
    printf("%.17g\n", d);
    IsaacYoung
        15
    IsaacYoung  
       2020 年 9 月 25 日 via iPhone
    懂得都懂
    m30102
        16
    m30102  
    OP
       2020 年 9 月 25 日   1
    @icyalala 感谢 V 站较真大神
    gadsavesme
        17
    gadsavesme  
       2020 年 9 月 25 日
    各种排序我能手写,补码这种早忘了。两件事又没啥关联,能手写排序也不是能力多强,只是平常会经常刷算法题,原反补码这种不经常看忘记很正常。
    coderluan
        18
    coderluan  
       2020 年 9 月 25 日
    用这种方式提问的, 肯定都原因, 不知道楼主是辩论还是面试的时候受挫了.

    不抬杠的话, 排序其实是非常好的问题, 考察重点也不只是基础编程能力, 而是优化代码的能力, 一个好的面试官会不会让你写各种排序, 而是让你选择一种你排序来写并且说明为什么选这个, 写完了再引导你进行优化, 随便还能看看你的代码质量. 很多人之所以反感排序是因为很多面试官的水平不够, 并不是写个排序本身有什么问题.
    rebeccaMyKid
        19
    rebeccaMyKid  
       2020 年 9 月 25 日
    CSAPP 第二章 第二节 有讲补码。结合前面讲的二进制,十六进制和十进制的转换方法。给定一个数据类型以及值,比如 char 类型( 8 位),值 -90,写补码是很简单的事情,我觉得应该记住。(温馨提示:阅读时间大概 1 小时)

    我之前记不住是因为没有接触到这个公式和体系,看的都是知乎的什么解释,现在发现看的知乎那个解释适合理解,但不适合计算。
    rebeccaMyKid
        20
    rebeccaMyKid  
       2020 年 9 月 25 日
    浮点数还没看,我上面说的是整数。
    shino996
        21
    shino996  
       2020 年 9 月 25 日 via iPhone
    就硬杠
    oaix
        22
    oaix  
       2020 年 9 月 26 日
    补码如果知道原理是不用记规则的。
    比如一个 byte 类型的负数-5
    1. 先用二进制表示他对应的正数:0000 0101
    2. 再用 0 减去这个正数

    ```
    0000 0000
    -0000 0101
    --------------
    1111 1011

    ```
    m30102
        23
    m30102  
    OP
       2020 年 9 月 26 日
    @oaix 小数走起?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2663 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 03:19 PVG 11:19 LAX 19:19 JFK 22:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86