1
whileFalse 2020-09-25 09:33:09 +08:00
这是一回事儿吗?
|
2
m30102 OP @whileFalse 都是基础啊
|
3
keith1126 2020-09-25 09:37:55 +08:00
浮点数哪来的补码?楼主水平堪忧。
|
4
yogogo 2020-09-25 09:42:01 +08:00
钓鱼也不用这样钓啊~
|
5
luckyrayyy 2020-09-25 09:44:34 +08:00 11
不能用针在光盘上戳个 linux 内核出来的,一律认定为基础不行。
|
7
bnrwnjyw 2020-09-25 09:49:15 +08:00
楼主是不是被喷过啊?报复性提问?
|
8
mazyi 2020-09-25 09:50:27 +08:00 via iPhone
我来问个基础,你是谁?
|
9
yazinnnn 2020-09-25 09:51:50 +08:00
你从哪来?要到哪去?
|
10
raaaaaar 2020-09-25 09:57:57 +08:00 via Android 4
我们学这些东西,不是做一个什么都纯的硬盘,而是纯它们的缓存,有一个快速的索引。
就你举的这个例子,除了那些要考试,要面试的,或者打竞赛的人,没有人天天去刷什么排序的哪一步是怎么样的。但是你一说排序,我们就知道排序是什么东西,大概有哪些排序,他们的原理大概是怎么样的,他们的时间复杂度是怎么样的,在某个场景时,我们也能去分析用什么算法,而不是马上打开 IDE 就开始写代码,这种情况在工程中几乎不可能存在,要写我们也会网上查,去笔记中找。 什么补码就更是如此,我们学这个不是让你拿个数字就能开始算,而是知道,补码是个什么东西?它用在什么地方,为什么要有这个东西?它大概是个什么思路?诸如此类。 |
12
shilyx 2020-09-25 10:08:26 +08:00
能用勺子吃米饭的人,能精确的知道每一勺子有多少米饭粒吗?
|
14
icyalala 2020-09-25 10:18:15 +08:00 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); |
15
IsaacYoung 2020-09-25 10:29:12 +08:00 via iPhone
懂得都懂
|
17
gadsavesme 2020-09-25 10:32:53 +08:00
各种排序我能手写,补码这种早忘了。两件事又没啥关联,能手写排序也不是能力多强,只是平常会经常刷算法题,原反补码这种不经常看忘记很正常。
|
18
coderluan 2020-09-25 10:36:51 +08:00
用这种方式提问的, 肯定都原因, 不知道楼主是辩论还是面试的时候受挫了.
不抬杠的话, 排序其实是非常好的问题, 考察重点也不只是基础编程能力, 而是优化代码的能力, 一个好的面试官会不会让你写各种排序, 而是让你选择一种你排序来写并且说明为什么选这个, 写完了再引导你进行优化, 随便还能看看你的代码质量. 很多人之所以反感排序是因为很多面试官的水平不够, 并不是写个排序本身有什么问题. |
19
rebeccaMyKid 2020-09-25 11:36:06 +08:00
CSAPP 第二章 第二节 有讲补码。结合前面讲的二进制,十六进制和十进制的转换方法。给定一个数据类型以及值,比如 char 类型( 8 位),值 -90,写补码是很简单的事情,我觉得应该记住。(温馨提示:阅读时间大概 1 小时)
我之前记不住是因为没有接触到这个公式和体系,看的都是知乎的什么解释,现在发现看的知乎那个解释适合理解,但不适合计算。 |
20
rebeccaMyKid 2020-09-25 11:36:56 +08:00
浮点数还没看,我上面说的是整数。
|
21
shino996 2020-09-25 11:43:08 +08:00 via iPhone
就硬杠
|
22
oaix 2020-09-26 08:02:13 +08:00
补码如果知道原理是不用记规则的。
比如一个 byte 类型的负数-5 1. 先用二进制表示他对应的正数:0000 0101 2. 再用 0 减去这个正数 ``` 0000 0000 -0000 0101 -------------- 1111 1011 ``` |