跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 那些能手写各种排序的人能手写数的补码吗?比如 -1.234 的补码。
未分類
2 10 月 2020

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

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

資深大佬 : m30102 5

这是一回事儿吗?

大佬有話說 (22)

  • 資深大佬 : whileFalse

    @whileFalse 都是基础啊

  • 主 資深大佬 : m30102

    浮点数哪来的补码?主水平堪忧。

  • 資深大佬 : keith1126

    钓鱼也不用这样钓啊~

  • 資深大佬 : yogogo

    不能用针在光盘上戳个 linux 内核出来的,一律认定为基础不行。

  • 資深大佬 : luckyrayyy

    @keith1126 不带我定点小数玩了?

  • 主 資深大佬 : m30102

    主是不是被喷过啊?报复性提问?

  • 資深大佬 : bnrwnjyw

    我来问个基础,你是谁?

  • 資深大佬 : mazyi

    你从哪来?要到哪去?

  • 資深大佬 : yazinnnn

    我们学这些东西,不是做一个什么都纯的硬盘,而是纯它们的缓存,有一个快速的索引。

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

    什么补码就更是如此,我们学这个不是让你拿个数字就能开始算,而是知道,补码是个什么东西?它用在什么地方,为什么要有这个东西?它大概是个什么思路?诸如此类。

  • 資深大佬 : raaaaaar

    @keith1126 我记得课本上教的是 IEEE754 标准,分为底数和基数,好像两者中确实有一个用补码表示的

  • 資深大佬 : yuruizhe

    能用勺子吃米饭的人,能精确的知道每一勺子有多少米饭粒吗?

  • 資深大佬 : shilyx

    @raaaaaar 是啊,但面试没答出来就算不会,答出来了 过段时间又忘,这样不是瞎折腾么?

  • 主 資深大佬 : m30102

    假设主不是来钓鱼的吧。。
    浮点数一般是按 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(“%.17gn”, d);

  • 資深大佬 : icyalala

    懂得都懂

  • 資深大佬 : IsaacYoung

    @icyalala 感谢 V 站较真大神

  • 主 資深大佬 : m30102

    各种排序我能手写,补码这种早忘了。两件事又没啥关联,能手写排序也不是能力多强,只是平常会经常刷算法题,原反补码这种不经常看忘记很正常。

  • 資深大佬 : gadsavesme

    用这种方式提问的, 肯定都原因, 不知道主是辩论还是面试的时候受挫了.

    不抬杠的话, 排序其实是非常好的问题, 考察重点也不只是基础编程能力, 而是优化代码的能力, 一个好的面试官会不会让你写各种排序, 而是让你选择一种你排序来写并且说明为什么选这个, 写完了再引导你进行优化, 随便还能看看你的代码质量. 很多人之所以反感排序是因为很多面试官的水平不够, 并不是写个排序本身有什么问题.

  • 資深大佬 : coderluan

    CSAPP 第二章 第二节 有讲补码。结合前面讲的二进制,十六进制和十进制的转换方法。给定一个数据类型以及值,比如 char 类型( 8 位),值 -90,写补码是很简单的事情,我觉得应该记住。(温馨提示:阅读时间大概 1 小时)

    我之前记不住是因为没有接触到这个公式和体系,看的都是知乎的什么解释,现在发现看的知乎那个解释适合理解,但不适合计算。

  • 資深大佬 : rebeccaMyKid

    浮点数还没看,我上面说的是整数。

  • 資深大佬 : rebeccaMyKid

    就硬杠

  • 資深大佬 : shino996

    补码如果知道原理是不用记规则的。
    比如一个 byte 类型的负数-5
    1. 先用二进制表示他对应的正数:0000 0101
    2. 再用 0 减去这个正数

    “`
    0000 0000
    -0000 0101
    ————–
    1111 1011

    “`

  • 資深大佬 : oaix

    @oaix 小数走起?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具