C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针每个存储 0 或 1 的空间称为一个位( bit ),一位可以存储 0 或 1 两个可能的值。 • 现在的计算机都会把 8 个位打包成一个字节( byte ),也就是说: 1 字节 = 8 位。 • 一字节可以表示 0 到 255 区间中所有的值,表示方式如下: • 00000000 表示 0 00000001 表示 1 00000010 表示 2 00000011 表示 3 • 00000100 252 11111101 表示 253 11111110 表示 254 11111111 表示 255 • 字节实际上就是 C 语言中的 unsigned char 类型。 表示更大范围的整数:字( word ) • 但是单单一个字节表示的范围还是太有限了,只能表示 0 到 255 的值。 • 如何扩大表示范围?简单,用两个字节合在一起即可,例如: • 00000000-00000000 11111111-11111111 表示 65535 • 这就是两个字节合成了一个字( word ),实际上就是 C 语言里的 unsigned short 类型 。 不同位数的计算机,字( word )的大小也不一样 • 刚刚说把 2 个字节( byte )拼成一个字( word ),实际上是 16 位计算机的做法。 • 16 位计算机得名就是因为他的字由 16 个位组成,早期的 8086 系列 CPU 就是 160 码力 | 128 页 | 2.95 MB | 1 年前3
阮一峰 《ECMAScript 6入门》 第三版install --save-dev eslint babel-eslint ECMAScript 6简介 18 然后,在项目根目录下,新建一个配置文件 .eslintrc ,在其中加入 parser 字 段。 { "parser": "babel-eslint", "rules": { ... } } 再在 package.json 之中,加入相应的 scripts let hello = 123; hell\u{6F} // 123 '\u{1F680}' === '\uD83D\uDE80' // true 上面代码中,最后一个例子表明,大括号表示法与四字节的 UTF-16 编码是等价 的。 有了这种表示法之后,JavaScript 共有6种方法可以表示一个字符。 '\z' === 'z' // true '\172' === 'z' // true 确地识 别了“” ,返回了它的十进制码点134071(即十六进制的 20BB7 )。在第二个字 符(即“” 的后两个字节)和第三个字符“a”上, codePointAt 方法的结果 与 charCodeAt 方法相同。 总之, codePointAt 方法会正确返回32位的UTF-16字符的码点。对于那些两个 字节储存的常规字符,它的返回结果与 charCodeAt 方法相同。0 码力 | 679 页 | 2.66 MB | 1 年前3
python3学习手册shortcuts ★设置每行最大长度 File → Se�ngs → Editor → Code Style → 右侧的 General下的 Hard wrap at: 120(默认为120字符) ★设置源码文件字符编码 File → Se�ngs → Editor → File Encodeings → 右侧的“Global Encoding”设 置目标字符编码,默认UTF-8 # python3 --version #查看版本 # python3 -V #查看版本 ★第3章、基础语法 ★保留字(关键字) True False None as nonlocal and exec not assert finally or break for pass class from print con�nue 集合 py3新 增 dic�onary 无序 字典 {键值对 集合} 关键字必须互不相同 bytes 有序 字节数组,其元素值不可变,其元素类型为int (0~255) py3新增 bytearray 有 序 字 节 数 组 , 其 元 素 值 可 变 , 其 元 素 类 型 为 int (0~255) py3新增 不可变类型:0 码力 | 213 页 | 3.53 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 下面的程序应该是最简单的Go程序。 1. package main 2. 3. func main() { 4. } 在此程序中,单词package和func是两个关键字。 两个main是两个标识符。 标 识符和关键字将在后续的一篇文章中讲解。 此程序的第一行指定了当前源代码文件所处的包的包名(此处为main)。 第二 行是一个空行,用来增强可读性。 第三和第四行声明了一个名为main的函数。 (identifier)(第5章)。 高级编程语言代码将被编译器或者解释器转换为底层机器码进行执行。 为了帮 助 编 译 器 和 解 释 器 解 析 高 级 语 言 代 码 , 一 些 单 词 将 被 用 做 关 键 字 (keyword)。 这些单词不能被当做标识符使用。 很多现代高级语言使用包(package)来组织代码。 一个包必须引入(import) 另一个包才能使用另一个包中的公有(导出的)代码要素。 包名和包的引入名0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 下面的程序应该是最简单的Go程序。 1| package main 2| 3| func main() { 4| } 在此程序中,单词package和func是两个关键字。 两个main是两个标识符。 标识符和关键字将在后续的一篇文章中讲解。 此程序的第一行指定了当前源代码文件所处的包的包名(此处为main)。 第 二行是一个空行,用来增强可读性。 第三和第四行声明了一个名为main的函 定义类型和类型别名将被统称为代码要素。 代码要素名必须为标识符 (identifier)(第5章)。 高级编程语言代码将被编译器或者解释器转换为底层机器码进行执行。 为了 帮助编译器和解释器解析高级语言代码,一些单词将被用做关键字 (keyword)。 这些单词不能被当做标识符使用。 很多现代高级语言使用包(package)来组织代码。 一个包必须引入 (import)另一个包才能使用另一个包中的公有(导出的)代码要素。 包名和0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a- 为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 下面的程序应该是最简单的Go程序。 1| package main 2| 3| func main() { 4| } 在此程序中,单词package和func是两个关键字。 两个main是两个标识符。 标 识符和关键字将在后续的一篇文章中讲解。 此程序的第一行指定了当前源代码文件所处的包的包名(此处为main)。 第二行 是一个空行,用来增强可读性。 第三和第四行声明了一个名为main的函数。 型和类型别名将被统称为代码要素。 代码要素名必须为标识符(identifier)(第 5章)。 高级编程语言代码将被编译器或者解释器转换为底层机器码进行执行。 为了帮助编 译器和解释器解析高级语言代码,一些单词将被用做关键字(keyword)。 这些单 词不能被当做标识符使用。 很多现代高级语言使用包(package)来组织代码。 一个包必须引入(import)另 一个包才能使用另一个包中的公有(导出的)代码要素。 包名和包的引入名也都必0 码力 | 591 页 | 21.40 MB | 1 年前3
RISC-V 开放架构设计之道 1.0.0FLDSP rd,imm 比较-置位 小于则置位 R SLT rd,rs1,rs2 存数 存字 CS C.SW rs2′,imm(rs1′) 小于立即数则置位 I SLTI rd,rs1,imm 相对栈指针存字 CSS C.SWSP rs2,imm 无符号小于则置位 R SLTU rd,rs1,rs2 存浮点字 CS C.FSW rs2′ imm(rs1) 寄存器跳转并链接 CR C.JALR rs1 取半字 I LH rd,imm(rs1) 系统 环境断点 CR C.EBREAK 取无符号字节 I LBU rd,imm(rs1) 取无符号半字 I LHU rd,imm(rs1) 取字 I LW rd,imm(rs1) 加字 (C.ADDW) 存数 存字节 S SB SB rs2,imm(rs1) 加立即数字 (C.ADDIW) 存半字 S SH rs2,imm(rs1) 减字 (C.SUBW) 存字 S SW rs2,imm(rs1) SD rs2,imm(rs1) 开源 参考卡 ① 基础整数指令集:RV32I 和RV64I RV0 码力 | 223 页 | 15.31 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20C++ (本书中均指 C++11/14/17/20) 为传统 C++ 注入的大量特性使得整个 C++ 变得更加 像一门现代化的语言。现代 C++ 不仅仅增强了 C++ 语言自身的可用性,auto 关键字语义的修改使得我 们更加有信心来操控极度复杂的模板类型。同时还对语言运行期进行了大量的强化,Lambda 表达式的出 现让 C++ 具有了『匿名函数』的『闭包』特性,而这一特性几乎在现代的编程语言(诸如 到问题时,不 妨读一读随书附上的源码,你可以在这里中找到书中介绍过的全部的源码,所有代码按章节组织,文件 夹名称为章节序号。 随书习题 本书每章最后还加入了少量难度极小的习题,仅用于检验你是否能混合运用当前章节中的知识点。你 可以在这里找到习题的答案,文件夹名称为章节序号。 第 1 章迈向现代 C++ 编译环境:本书将使用 clang++ 作为唯一使用的编译器,同时总是在代码中使用 -std=c++2a 异常说明、unexpected_handler、set_unexpected() 等相关特性被弃用,应该使用 noexcept。 • auto_ptr 被弃用,应使用 unique_ptr。 • register 关键字被弃用,可以使用但不再具备任何实际含义。 • bool 类型的 ++ 操作被弃用。 • 如果一个类有析构函数,为其生成拷贝构造函数和拷贝赋值运算符的特性被弃用了。 • C 语言风格的类型转换被弃用(即在变量前使用0 码力 | 83 页 | 2.42 MB | 1 年前3
RISC-V 手册 v2(一本开源指令集的指南)ISA 转到 RISC-V 的最为可能的 原因。 第九章展示了 RV64G,它是 RISC-V 的 64 位地址版本。正如该章节所说的那样, RISC-V 的架构师只需要拓宽寄存器,并加入一些字、双字或长版的 RV32G 指令,就可以 把地址从 32 位扩展为 64 位。 第十章介绍了系统指令,说明了 RISC-V 如何处理分页以及机器、用户和监管者权限 模式。 最后一章简要介绍了 令也是非法指令,它将捕获其他常见的错误,诸如未编程的非易失性内存设备、断开连接 的内存总线或者坏掉的内存芯片。 为了给 ISA 扩展留出足够的空间,最基础的 RV32I 指令集只使用了 32 位指令字中的 编码空间的不到八分之一。架构师们也仔细挑选了 RV32I 操作码,使拥有共同数据通路的 指令的操作码位有尽可能多的位的值是一样的,这简化了控制逻辑。最后,当我们看到,B 和 J 格式的分支和跳转地址必须向左移动 位 PC 相对地址。而 auipc 加上普通加载或存储指令中的 12 位立即数偏移量,使我们可以访问任何 32 位 PC 相对地址的数据。 有什么不同之处?首先,RISC-V 中没有字节或半字宽度的整数计算操作。操作始终 是以完整的寄存器宽度。内存访问需要的能量比算术运算高几个数量级。因此低宽度的数 据访问可以节省大量的能量,但低宽度的运算不会。ARM-32 具有一个不寻常的功能,对 于0 码力 | 164 页 | 8.85 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串结尾字符串”知识点应用举例 • 利用 C 语言字符串“以 0 结尾”这个特点,我们可以在一个 本来非 0 的字符处写入 0 ,来提前结束字符串。例如在第 n 个字符写入 0 ,就会只保留前 n 个字符作为一个子字 符串,删除后半部分。 “0 结尾字符串”知识点应用举例 • C 语言所谓的字符串类型 char * 实际上就是个首地址指 针,如果让首地址指针向前移动 n 位,那就实现删除前 n 个字符的效果,而不用实际修改数组本身(更高效)。 utils/format.h cout 支持十六进制 官方推荐用 stringstream 取代 to_string • cout 这么方便,能不能让他不要直接输出到控制台,而是把结果存到一个字 符串呢?这正是字符串流 stringstream 的作用。 • 和 cout 完全一样,同样的 << 和 hex 选项。 • 但是他的输出会保存到一个字符串里。 • 调用成员函数 .str() 就能取出这个字符串了。 超出了原字符串的范围,则抛出 std::out_of_range 异常(和 at 同款的哦)。 • 可以指定 len 为 -1 (即 string::npos ),此时会截取从 pos 开始直到原字符串末尾的子字 符串。 • 不指定第二参数 len 时,默认的 len 就是 -1 (见下方第三个例子)。 • 例如: • “hello”.substr(1, 3) = “ell” • “hello”.substr(10 码力 | 162 页 | 40.20 MB | 1 年前3
共 640 条
- 1
- 2
- 3
- 4
- 5
- 6
- 64













