 ECMAScript规范 第三版 中文版多行非正斜 杠或星号字符 多行注释字符集 opt * 后星号注释字符 opt 多行非星号字符:: 源代码字符 but not 星号 * 多行非正斜杠或星号字符:: 源代码字符 but not 正斜杠 /or 星号* 单行注释:: // 单行注释字符集 opt 单行注释字符集:: 单行注释字符 单 行注释字符集 opt 单行注释字符:: 源代码字符 opt 单字符串字符 s :: 单字符串字符 单字符串字符 sopt 双字符串字符 :: 源代码字符 but not 双引号 " or 反斜杠 \ or 行结束符 \ 转义序列 单字符串字符 :: 源代码字符 but not 单引号 ' or 反斜杠 \ or 行结束符 \ 转义序列 转义序列 :: 字符转义序列 0 [lookahead ? 十进制数字] 十六进制转义序列 集的 SV 中的有序字符 • 双字符串字符 :: 源代码字符 but not 双引号 " or 反斜杠 \ or 行结束符 是 the 源代码字 符 字符本身。 • 双字符串字符 :: \ 转义序列 是 转义序列. 单字符串字符 :: 源代码字符 but not 单引号 ' or 反斜杠 \ or 行结束符 是 源代码字符 字符本身。 • 单字符串字符 :: \ 转义序列 是 转 义序列0 码力 | 58 页 | 563.06 KB | 1 年前3 ECMAScript规范 第三版 中文版多行非正斜 杠或星号字符 多行注释字符集 opt * 后星号注释字符 opt 多行非星号字符:: 源代码字符 but not 星号 * 多行非正斜杠或星号字符:: 源代码字符 but not 正斜杠 /or 星号* 单行注释:: // 单行注释字符集 opt 单行注释字符集:: 单行注释字符 单 行注释字符集 opt 单行注释字符:: 源代码字符 opt 单字符串字符 s :: 单字符串字符 单字符串字符 sopt 双字符串字符 :: 源代码字符 but not 双引号 " or 反斜杠 \ or 行结束符 \ 转义序列 单字符串字符 :: 源代码字符 but not 单引号 ' or 反斜杠 \ or 行结束符 \ 转义序列 转义序列 :: 字符转义序列 0 [lookahead ? 十进制数字] 十六进制转义序列 集的 SV 中的有序字符 • 双字符串字符 :: 源代码字符 but not 双引号 " or 反斜杠 \ or 行结束符 是 the 源代码字 符 字符本身。 • 双字符串字符 :: \ 转义序列 是 转义序列. 单字符串字符 :: 源代码字符 but not 单引号 ' or 反斜杠 \ or 行结束符 是 源代码字符 字符本身。 • 单字符串字符 :: \ 转义序列 是 转 义序列0 码力 | 58 页 | 563.06 KB | 1 年前3
 阮一峰 JavaScript 教程上面两个都是合法的字符串。 字符串 概述 定义 字符串 - 84 - 本文档使用 书栈(BookStack.CN) 构建 如果要在单引号字符串的内部,使用单引号,就必须在内部的单引号前 面加上反斜杠,用来转义。双引号字符串内部使用双引号,也是如此。 1. 'Did she say \'Hello\'?' 2. // "Did she say 'Hello'?" 3. 4. "Did she t 就会报错。 如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。 1. var longString = 'Long \ 2. long \ 3. long \ 4. string'; 5. 6. longString 7. // "Long long long string" 上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多 行书写。但是,输出的时候还是单行,效果与写在同一行完全一样。注 行书写。但是,输出的时候还是单行,效果与写在同一行完全一样。注 字符串 - 85 - 本文档使用 书栈(BookStack.CN) 构建 意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否 则会报错。 连接运算符( + )可以连接多个单行字符串,将长字符串拆成多行书 写,输出的时候也是单行。 1. var longString = 'Long ' 2. + 'long ' 3. + 'long0 码力 | 540 页 | 3.32 MB | 10 月前3 阮一峰 JavaScript 教程上面两个都是合法的字符串。 字符串 概述 定义 字符串 - 84 - 本文档使用 书栈(BookStack.CN) 构建 如果要在单引号字符串的内部,使用单引号,就必须在内部的单引号前 面加上反斜杠,用来转义。双引号字符串内部使用双引号,也是如此。 1. 'Did she say \'Hello\'?' 2. // "Did she say 'Hello'?" 3. 4. "Did she t 就会报错。 如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。 1. var longString = 'Long \ 2. long \ 3. long \ 4. string'; 5. 6. longString 7. // "Long long long string" 上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多 行书写。但是,输出的时候还是单行,效果与写在同一行完全一样。注 行书写。但是,输出的时候还是单行,效果与写在同一行完全一样。注 字符串 - 85 - 本文档使用 书栈(BookStack.CN) 构建 意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否 则会报错。 连接运算符( + )可以连接多个单行字符串,将长字符串拆成多行书 写,输出的时候也是单行。 1. var longString = 'Long ' 2. + 'long ' 3. + 'long0 码力 | 540 页 | 3.32 MB | 10 月前3
 阮一峰 《ECMAScript 6入门》 第三版String.fromCodePoint 方法,可以识别大于 0xFFFF 的字符,弥补 了 String.fromCharCode 方法的不足。在作用上,正好与 codePointAt 方法相 反。 字符串的扩展 66 String.fromCodePoint(0x20BB7) // "" String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y' in your basket, ${basket.onSale} are on sale! `); 模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当 作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。 字符串的扩展 73 // 普通字符串 `In JavaScript '\n' is a line-feed name = "Bob", time = "today"; `Hello ${name}, how are you ${time}?` 上面代码中的模板字符串,都是用反引号表示。如果在模板字符串中需要使用反引 号,则前面要用反斜杠转义。 var greeting = `\`Yo\` World!`; 如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。 $('#list')0 码力 | 679 页 | 2.66 MB | 1 年前3 阮一峰 《ECMAScript 6入门》 第三版String.fromCodePoint 方法,可以识别大于 0xFFFF 的字符,弥补 了 String.fromCharCode 方法的不足。在作用上,正好与 codePointAt 方法相 反。 字符串的扩展 66 String.fromCodePoint(0x20BB7) // "" String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y' in your basket, ${basket.onSale} are on sale! `); 模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当 作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。 字符串的扩展 73 // 普通字符串 `In JavaScript '\n' is a line-feed name = "Bob", time = "today"; `Hello ${name}, how are you ${time}?` 上面代码中的模板字符串,都是用反引号表示。如果在模板字符串中需要使用反引 号,则前面要用反斜杠转义。 var greeting = `\`Yo\` World!`; 如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。 $('#list')0 码力 | 679 页 | 2.66 MB | 1 年前3
 [试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 getElementById()与 getElementbyID()也是不同的,而 且 getElementbyID()是无效函数。 2.1.3 代码换行 ECMAScript 语法规定可以在文本字符串中使用反斜杠(\)对代码行进行换行。例如,下 面的代码是可以正确解析的。 document.write("Hello \ EcmaScript!"); 不过需要注意的是,代码换行限于文本字符串中。如果将上面的代码改写成下面的形式, \n 换行 \b 空格 \t 制表符 47 第 2 章 ECMAScript 语法基础 (续表) 编码 描述 \r 回车 \\ 反斜杠 \' 单引号 \" 双引号 下面,就看一段使用 String 类型特殊字符串的代码示例(详见源代码 ch02 目录中 ch02-js-string-c.html 文件)。 【代码0 码力 | 52 页 | 3.83 MB | 1 年前3 [试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 getElementById()与 getElementbyID()也是不同的,而 且 getElementbyID()是无效函数。 2.1.3 代码换行 ECMAScript 语法规定可以在文本字符串中使用反斜杠(\)对代码行进行换行。例如,下 面的代码是可以正确解析的。 document.write("Hello \ EcmaScript!"); 不过需要注意的是,代码换行限于文本字符串中。如果将上面的代码改写成下面的形式, \n 换行 \b 空格 \t 制表符 47 第 2 章 ECMAScript 语法基础 (续表) 编码 描述 \r 回车 \\ 反斜杠 \' 单引号 \" 双引号 下面,就看一段使用 String 类型特殊字符串的代码示例(详见源代码 ch02 目录中 ch02-js-string-c.html 文件)。 【代码0 码力 | 52 页 | 3.83 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Dart 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.dart hello‑algo.com 56 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的 定義。 ‧ 原碼:我們將數字的二進位制表示的最高位視為符號位,其中0 码力 | 378 页 | 18.77 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 Dart 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.dart hello‑algo.com 56 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的 定義。 ‧ 原碼:我們將數字的二進位制表示的最高位視為符號位,其中0 码力 | 378 页 | 18.77 MB | 10 月前3
 Hello 算法 1.2.0 繁体中文 JavaScript 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.js === 讀章節後再單獨攻克。 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 第 3 章 資料結構 www.hello‑algo.com 56 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的0 码力 | 379 页 | 18.78 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 JavaScript 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.js === 讀章節後再單獨攻克。 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 第 3 章 資料結構 www.hello‑algo.com 56 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的0 码力 | 379 页 | 18.78 MB | 10 月前3
 Hello 算法 1.2.0 繁体中文 TypeScript 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.ts === hello‑algo.com 56 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的 定義。 ‧ 原碼:我們將數字的二進位制表示的最高位視為符號位,其中0 码力 | 384 页 | 18.80 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 TypeScript 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.ts === hello‑algo.com 56 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的 定義。 ‧ 原碼:我們將數字的二進位制表示的最高位視為符號位,其中0 码力 | 384 页 | 18.80 MB | 10 月前3
 Hello 算法 1.1.0 Dart版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 378 页 | 18.45 MB | 1 年前3 Hello 算法 1.1.0 Dart版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 378 页 | 18.45 MB | 1 年前3
 Hello 算法 1.1.0 JavaScript版必 读章节后再单独攻克。 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 第 3 章 数据结构 hello‑algo.com 56 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 数据结构 hello‑algo.com 58 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 379 页 | 18.46 MB | 1 年前3 Hello 算法 1.1.0 JavaScript版必 读章节后再单独攻克。 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 第 3 章 数据结构 hello‑algo.com 56 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 数据结构 hello‑algo.com 58 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 379 页 | 18.46 MB | 1 年前3
 Hello 算法 1.1.0 TypeScript版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 383 页 | 18.49 MB | 1 年前3 Hello 算法 1.1.0 TypeScript版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 383 页 | 18.49 MB | 1 年前3
共 29 条
- 1
- 2
- 3













