二进制数、位运算及编程术语详解
1. 二进制数基础
1.1 十进制与二进制表示
在日常中,我们常用十进制来表示数字,它以 10 的幂次为基础。例如,1729 可以表示为 (1\times10^3 + 7\times10^2 + 2\times10^1 + 9\times10^0)。选择 10 作为基数并没有特别的原因,只是因为历史上很多数字系统源于人们用手指计数。在人类历史中,不同文化也使用过以 12、20 或 60 为基数的数字系统。
而计算机采用以 2 为基数的数字系统,即二进制。这是因为构建能处理两种状态(如电流的开和关)的电子元件,远比表示 10 种不同的电信号状态容易。例如,二进制数 1101 可表示为 (1\times2^3 + 1\times2^2 + 0\times2^1 + 1\times2^0 = 8 + 4 + 0 + 1 = 13)。
对于二进制小数点后的数字,使用 2 的负幂次。如 1.101 可表示为 (1\times2^0 + 1\times2^{-1} + 0\times2^{-2} + 1\times2^{-3} = 1 + 0.5 + 0 + 0.125 = 1.625)。
1.2 二进制与十进制的转换
1.2.1 二进制转十进制
一般来说,将二进制数转换为十进制数,只需计算值为 1 的位对应的 2 的幂次,并将它们相加。以下是 2 的前几次幂:
| 幂次 | 十进制值 |
| ---- | ---- |
| (2^0) | 1 |
| (2^1) | 2 |
| (2^2) | 4 |
| (2^3) | 8 |
| (2^4) | 16 |
| (2^5) | 32 |
| (2^6) | 64 |
| (2^7) | 128 |
| (2^8) | 256 |
| (2^9) | 512 |
| (2^{10}) | 1024 |
| (2^{11}) | 2048 |
| (2^{12}) | 4096 |
| (2^{13}) | 8192 |
| (2^{14}) | 16384 |
| (2^{15}) | 32768 |
| (2^{16}) | 65536 |
1.2.2 十进制整数转二进制
将十进制整数转换为二进制,可不断将该整数除以 2,并记录余数,直到商为 0。然后从最后一个余数开始,依次写出这些余数,即为对应的二进制数。例如,将 100 转换为二进制:
- (100 ÷ 2 = 50) 余 0
- (50 ÷ 2 = 25) 余 0
- (25 ÷ 2 = 12) 余 1
- (12 ÷ 2 = 6) 余 0
- (6 ÷ 2 = 3) 余 0
- (3 ÷ 2 = 1) 余 1
- (1 ÷ 2 = 0) 余 1
所以,(100_{十进制}= 1100100_{二进制})。
1.2.3 十进制小数转二进制
将小于 1 的十进制小数转换为二进制,可不断将其乘以 2。若结果大于 1,则减去 1。当结果为 0 时停止,然后从第一个结果开始,取每次结果小数点前的数字作为二进制小数部分。例如,将 0.35 转换为二进制:
- (0.35 × 2 = 0.7)
- (0.7 × 2 = 1.4)
- (0.4 × 2 = 0.8)
- (0.8 × 2 = 1.6)
- (0.6 × 2 = 1.2)
- (0.2 × 2 = 0.4)
此时出现循环,所以 0.35 的二进制表示为 (0.01 0110 0110 0110 …)。
对于任意浮点数,可分别将其整数部分和小数部分转换为二进制。
1.3 二进制补码整数
Python 使用“二进制补码”来表示负整数。要得到一个整数的负数,可按以下步骤操作:
1. 翻转该整数的所有位。
2. 然后加 1。
例如,计算 -13 的 8 位二进制补码:
首先,13 的 8 位二进制表示为 00001101,翻转所有位得到 11110010,然后加 1,得到 -13 的 8 位二进制补码为 11110011。
在进行负数加法时,无需特殊规则,只需遵循正常的加法规则,若某一位的和与进位之和为 2 或 3,则向前进位。例如:
+13 0000 1101
-13 1111 0011
1 0000 0000
由于只考虑最后 8 位,所以 +13 和 -13 相加结果为 0。
特别地,-1 的二进制补码表示为所有位都为 1。二进制补码数的最左边一位,若为 0 则表示该数为正数或零,若为 1 则表示该数为负数。
1.4 位运算和移位运算
1.4.1 位运算
Python 中有四种位运算:一元取反(~)、二元与(&)、二元或(|)和异或(^,也称为 xor)。以下是这些位运算的真值表:
| 位运算 | 真值表 |
| ---- | ---- |
| 一元取反(~) |
| a | ~a |
| 0 | 1 |
| 1 | 0 |
| 二元与(&)、或(|)、异或(^) |
| a | b | a & b | a | b | a ^ b |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
当对整数进行位运算时,会对对应的位进行操作。例如,计算 46 & 13:
首先,将 46 转换为二进制为 101110(32 位整数表示为 00000000000000000000000000101110),13 转换为二进制为 1101。然后对对应位进行与运算:
0.....0101110
& 0.....0001101
0.....0001100
结果为 1100 二进制,即 12 十进制。
有时会使用 | 运算符来组合两个位模式。例如,符号常量 BOLD 的值为 1,ITALIC 的值为 2,BOLD | ITALIC 的结果为 0000011,即同时设置了粗体和斜体位。
1.4.2 移位运算
除了对单个位进行操作的运算外,还有两种移位运算,可将一个数的位模式向左或向右移动指定的位数。
左移(<<)将所有位向左移动,在最低有效位填充 0。向左移动 n 位相当于将该数乘以 (2^n)。右移(>>)将所有位向右移动,并传播符号位,相当于将该数(正数和负数)除以 (2^n) 并取整。
表达式
1 << n
会得到一个位模式,其中第 n 位(最低有效位为第 0 位)被设置为 1。要设置一个数的第 n 位,可执行操作
x = x | 1 << n
;要检查第 n 位是否被设置,可执行测试
if (x & 1 << n) != 0 :
。
以下是移位运算的流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B{选择移位类型}:::decision
B -->|左移(<<)| C(将所有位向左移动 n 位):::process
B -->|右移(>>)| D(将所有位向右移动 n 位):::process
C --> E(在最低有效位填充 0):::process
D --> F(传播符号位):::process
E --> G([结束]):::startend
F --> G
2. 编程术语解释
2.1 类与对象相关术语
- 抽象类 :不能被实例化的类。
- 抽象方法 :有名称、参数变量和返回类型,但没有具体实现的方法。
- 访问器方法 :访问对象但不改变其状态的方法。
- 具体类 :可以被实例化的类。
- 类变量 :在类中定义的变量,整个类只有一个值,可被该类的任何方法访问和修改。
- 实例变量 :在类中定义的变量,类的每个对象都有自己的该变量值。
- 实例 :类的一个对象。
- 无参构造函数 :不接受任何参数的构造函数。
2.2 函数与方法相关术语
- 实际参数 :实际传递给函数或方法的参数。
- 形式参数 :函数或方法定义中的参数变量。
- 函数 :可多次调用的语句序列,可接受不同的参数值。
- 方法 :与函数类似,但只能应用于其定义的对象类型。
- 重载 :为一个方法名赋予多个含义。
- 重写 :在子类中重新定义一个方法。
- 动态方法查找 :在运行时选择要调用的方法。在 Python 中,动态方法查找会根据实际对象的类(隐式参数)来选择合适的方法。
2.3 算法与数据结构相关术语
- 算法 :解决问题的明确、可执行且能终止的规范。
- 二分查找 :在有序序列中查找值的快速算法,每一步将搜索范围缩小一半。
- 线性查找 :通过依次检查容器(如集合或列表)中的每个元素来查找对象。
- 合并排序 :先对数据结构的两部分分别排序,然后将排序好的两部分合并的排序算法。
- 快速排序 :通常较快的排序算法,选择一个基准元素,将序列分为小于和大于基准的两部分,然后递归地对这两部分进行排序。
- 选择排序 :不断找到并移除最小元素,直到没有元素剩余的排序算法。
- 容器 :能存储对象集合并提供管理和访问机制的数据结构,如列表、字典等。
- 字典 :存储键值对关联关系的容器。
- 序列 :可通过整数索引访问元素的容器。
- 元组 :类似于列表的不可变序列。
2.4 编程概念相关术语
- 赋值 :将新值放入变量中。
- 关联 :类之间的一种关系,可通过对象引用从一个类的对象导航到另一个类的对象。
- 布尔运算符 :可应用于布尔值的运算符,Python 中有 and、or 和 not 三种。
- 布尔类型 :有两个可能值(True 和 False)的类型。
- 边界错误 :尝试访问序列中超出合法范围的元素。
- 内置函数 :语言本身定义的函数,无需导入模块即可使用。
- 字节码 :Python 虚拟机的指令。
- 调用栈 :当前已调用但尚未终止的所有方法和函数的有序集合,从当前方法或函数开始,以主函数结束。
- 大小写敏感 :区分大小写字符。
- 中央处理器(CPU) :计算机中执行机器指令的部分。
- 注释 :帮助人类读者理解程序部分内容的解释,解释器会忽略注释。
- 编译器 :将高级语言代码(如 Python)转换为机器指令(如 Python 虚拟机的字节码)的程序。
- 编译时错误 :在程序编译时检测到的错误。
- 复合语句 :由一个头部和一个语句块组成的语句结构,头部以冒号(:)结尾。
- 计算机程序 :计算机执行的指令序列。
- 拼接 :将一个字符串放在另一个字符串后面形成新字符串。
- 常量 :程序中不能被改变的值,在 Python 中,常量通常用全大写字母命名。
- 构造函数 :用于初始化新实例化对象的语句序列。
- 封装 :隐藏实现细节。
- 异常 :表示阻止程序正常继续执行的条件的类。当出现这种情况时,会抛出异常类的对象。
- 异常处理程序 :当特定类型的异常被抛出并捕获时,获得控制权的语句序列。
- 表达式 :由常量、变量、函数和方法调用以及运算符组合而成的语法结构。
- 文件 :存储在磁盘上的字节序列。
- 浮点型数 :可以有小数部分的数。
- 地板除 :取两个整数的商并丢弃余数,在 Python 中用 // 表示。
- 格式运算符 :用于生成格式化字符串的百分号(%)。
- 垃圾回收 :自动回收不再被引用的对象所占用的内存。
- 全局变量 :作用域不限于单个函数或方法的变量。
- 硬件 :计算机或其他设备的物理设备。
- 哈希函数 :从对象计算整数值的函数,不同对象可能产生不同的值。
- 高级编程语言 :提供计算机抽象视图,允许程序员专注于问题领域的编程语言。
- 集成开发环境(IDE) :包含编辑器、编译器和调试器的编程环境。
- 不可变对象 :数据不能被修改的对象。
- 导入模块 :在当前模块中包含单独 Python 模块的内容以供使用。
- 继承 :更通用的超类和更具体的子类之间的关系。
- 初始化 :在创建变量时将其设置为明确的值。
- 内部类 :定义在另一个类内部的类。
- 整数 :不能有小数部分的数。
- 字典序排序 :按字典顺序对字符串进行排序,跳过所有匹配字符,比较第一个不匹配的字符。在 Python 中,排序是区分大小写的,Z 在 a 之前。
- 库 :可包含在程序中的一组模块。
- 逻辑错误 :语法正确但程序行为与规范不同的错误(运行时错误的一种形式)。
- 循环 :重复执行的指令序列。
- 半循环 :终止决策既不在开始也不在结束的循环。
- 机器代码 :可由 CPU 直接执行的指令。
- 幻数 :程序中无解释出现的数字。
- 修改读取 :在事件控制循环中读取的用户或文件输入,用于修改循环变量,通常与预读一起使用。
- 取模 :计算整数除法余数的 % 运算符。
- 修改器方法 :改变对象状态的方法。
- 相互递归 :相互调用的函数或方法。
- 嵌套循环 :包含在另一个循环中的循环。
- 网络 :计算机和其他设备的互连系统。
- 换行符 :表示行结束的 “\n” 字符。
- 空引用 :不引用任何对象的引用。
- 数字字面量 :程序中明确写成数字的固定值,如 -2 或 6.02214115E23。
- 面向对象编程 :通过发现对象、其属性和关系来设计程序。
- 对象引用 :表示对象在内存中位置的值。
- 差一错误 :常见的编程错误,值比应有的值大 1 或小 1。
- 打开文件 :为读取或写入文件做准备。
- 运算符 :表示数学或逻辑运算的符号,如 + 或 &&。
-
运算符结合性
:规定相同优先级运算符执行顺序的规则。例如,在 Python 中,- 运算符是左结合的,因为
a - b - c被解释为(a - b) - c;** 是右结合的,因为a ** b ** c被解释为a ** (b ** c)。 -
运算符优先级
:规定运算符计算顺序的规则。例如,在 Python 中,and 运算符的优先级高于 or 运算符,所以
a or b and c被解释为a or (b and c)。 - 越界错误 :尝试访问索引不在有效范围内的元素(边界错误)。
- 参数传递 :在调用方法或函数时指定作为参数的表达式。
- 排列 :一组值的重新排列。
- 多态 :根据隐式参数的实际类型从多个同名方法中选择要调用的方法。
- 主存储 :只要有电源就能存储数据的电子电路。
- 预读 :在事件控制循环开始前读取的用户或文件输入,用于初始化循环变量,通常与修改读取一起使用。
- 基本类型 :语言本身提供的数据类型。
- 编程 :设计和实现计算机程序的行为。
- 提示 :告诉用户提供输入的字符串。
- 伪代码 :使用英语和非正式编程语言语法对程序或算法操作的高级描述。
- 公共接口 :类中可供所有客户端访问的特性(方法、变量和嵌套类型)。
- Python 解释器 :将 Python 源代码转换为字节码并在 Python 虚拟机中执行的程序。
- Python shell :可用于与 Python 解释器交互的用户界面。
- 引发异常 :通过终止程序的正常控制流并将控制转移到匹配的 except 子句来指示异常情况。
- 随机访问 :无需读取前面的值即可直接访问任何值的能力。
- 递归 :通过将输入分解为更简单的值并对其应用相同策略来计算结果的策略。
- 递归函数或方法 :可以用更简单的值调用自身的函数或方法,但必须能处理最简单的值而不调用自身。
- 重定向 :将程序的输入或输出链接到文件而不是键盘或显示器。
- 正则表达式 :根据内容定义一组匹配字符串的字符串,每个部分可以是特定的必需字符、一组允许字符(如 [abc],可以是范围 [a - z])、不在一组禁止字符中的任何字符(如 [^0 - 9])、一次或多次匹配的重复(如 [0 - 9]+)或零次或多次匹配(如 [ACGT])、一组替代项(如 and|et|und)等。例如,“[A - Za - z][0 - 9]+” 匹配 “Cloud9” 或 “007”,但不匹配 “Jack”。
- 关系运算符 :比较两个值并产生布尔结果的运算符。
- 保留字 :在编程语言中有特殊含义,程序员不能用作名称的单词。
- 返回值 :方法或函数通过 return 语句返回的值。
- 舍入误差 :由于计算机只能存储有限位数的浮点数而引入的误差。
- 运行时错误 :语法正确但程序行为与规范不同的错误。
- 作用域 :变量在程序中定义的部分。
- 二级存储 :无需电力即可持久存储的存储设备,如硬盘。
- 哨兵值 :输入中不用作实际输入值,而是用于表示输入结束的值。
- 顺序访问 :依次访问值而不跳过任何值。
- 短路求值 :如果表达式的其余部分不会改变结果,则只计算表达式的一部分。
- 符号位 :二进制数中表示该数正负的位。
- 软件 :操作计算机或其他设备所需的无形指令和数据。
- 源代码 :需要在计算机上执行前进行翻译的编程语言指令。
- 源文件 :包含编程语言(如 Python)指令的文件。
- 标准库 :随解释器提供,可在每个 Python 程序中使用的模块集合。
- 状态 :对象的当前值,由对其调用的所有方法的累积作用决定。
- 语句 :程序中的语法单元,在 Python 中,语句可以是简单语句或复合语句。
- 语句块 :一组一个或多个语句,所有语句具有相同的缩进级别。
- 逐步细化 :通过将问题分解为更小的问题,然后进一步分解这些小问题来解决问题。
- 字符串 :字符序列。
- 字符串字面量 :在源代码中明确指定字符的字符串。
- 存根 :功能很少或没有功能的函数或方法。
- 子类 :从超类继承变量和方法,但也可以添加实例变量、添加方法或重新定义方法的类。
- 超类 :更通用的类,更具体的类(子类)从其继承。
- 对称边界 :包含起始索引和结束索引的边界。
- 语法 :定义在特定编程语言中如何形成指令的规则。
- 语法图 :语法规则的图形表示。
- 语法错误 :不遵循编程语言规则,被编译器拒绝的指令(编译时错误的一种形式)。
- 制表符 :将行中的下一个字符推进到一组固定位置(制表位)中的下一个位置的 “\t” 字符。
- 表 :元素按行和列索引指定的表格排列。
- 终端窗口 :通过文本命令与操作系统交互的窗口。
- 文本编辑器 :用于输入文本文件内容(如程序语句或数据文件内容)的软件应用程序。
- 文本文件 :以文本表示形式存储值的文件。
- 标记 :输入源中属于同一分析目的的连续字符序列,例如,标记可以是除空白字符外的字符序列。
- 跟踪消息 :在程序运行期间为调试目的打印的消息。
- 回溯 :调用栈的打印输出,列出所有当前未完成的方法调用。
- 类型 :一组命名的值以及可以对这些值执行的操作。
- 一元运算符 :有一个参数的运算符。
- Unicode :为世界各地脚本中使用的字符分配由两个字节组成的代码值的标准,Python 将所有字符存储为其 Unicode 值。
- 单元测试 :单独测试函数或方法,与程序的其余部分隔离。
- 用户定义的数据类型 :不是语言提供的,而是由用户定义的数据类型,在 Python 中,使用类定义来指定用户定义的数据类型。
- 变量 :程序中标识可以容纳不同值的存储位置的符号。
- 虚拟机 :模拟 CPU 的程序,可以在各种实际机器上高效实现。任何 Python 字节码程序都可以由任何 Python 虚拟机执行,无论运行虚拟机本身的 CPU 是什么。
- 演练 :对计算机程序进行逐步手动模拟。
- 空白 :仅由空格、制表符和换行符组成的任何字符序列。
- 窗口 :包含框架和标题栏的桌面组件。
- 包装类 :为现有类提供新的简化接口的类。
通过对二进制数、位运算和编程术语的详细介绍,我们可以更好地理解计算机底层的数字表示和编程中的基本概念,这对于深入学习编程和计算机科学至关重要。希望这些内容能帮助你在编程的道路上更进一步。
2.5 其他编程相关术语
2.5.1 文件与目录相关
- 二进制文件 :以二进制形式存储值,不能作为文本读取的文件。
- 目录 :磁盘上可容纳文件或其他目录的结构,也称为文件夹。
- 文件标记 :随机访问文件中,下一个要读取或写入的字节的位置,可移动以访问文件中的任何字节。
-
文件扩展名
:文件名的最后部分,用于指定文件类型,如
.py表示 Python 文件。
2.5.2 错误与调试相关
- 调试器 :可让用户单步或几步执行程序、停止执行并检查变量,以分析程序错误的程序。
- 编译时错误 :程序编译时检测到的错误,如语法错误。
- 运行时错误 :语法正确但程序运行时出现与规范不同行为的错误,如逻辑错误。
- 边界错误 :尝试访问序列中超出合法范围元素的错误。
- 差一错误 :常见编程错误,值比应有的值大 1 或小 1。
- 舍入误差 :因计算机只能存储有限位数浮点数而引入的误差。
2.5.3 运算符相关
-
二元运算符
:接受两个参数的运算符,如
x + y中的+。 -
布尔运算符
:可应用于布尔值的运算符,Python 中有
and、or和not。 -
运算符结合性
:规定相同优先级运算符执行顺序的规则,如 Python 中
-左结合,**右结合。 -
运算符优先级
:规定运算符计算顺序的规则,如 Python 中
and优先级高于or。
2.5.4 算法复杂度相关
-
大 O 表示法
:表示函数
g(n)的增长速率受函数f(n)增长速率限制,如10n² + 100n - 1000 = O(n²)。
2.6 编程操作相关术语
2.6.1 变量与赋值
- 赋值 :将新值放入变量的操作。
- 初始化 :创建变量时将其设置为明确的值。
- 局部变量 :作用域为函数或方法的变量。
- 全局变量 :作用域不限于单个函数或方法的变量。
2.6.2 函数与方法调用
- 实际参数 :实际传递给函数或方法的参数。
- 形式参数 :函数或方法定义中的参数变量。
- 参数传递 :调用方法或函数时指定作为参数的表达式。
-
返回值
:方法或函数通过
return语句返回的值。
2.6.3 类与对象操作
- 实例化 :创建类的对象。
- 继承 :子类从超类继承变量和方法,可添加或重定义。
- 多态 :根据实际对象类型从多个同名方法中选择调用的方法。
- 封装 :隐藏类的实现细节。
2.6.4 文件操作
- 打开文件 :为读取或写入文件做准备。
- 随机访问 :可直接访问文件中任何位置的值。
- 顺序访问 :依次访问文件中的值。
2.7 编程概念总结
编程涉及众多概念和术语,理解这些对于掌握编程技能至关重要。以下是一个简单的流程图,展示了从问题到程序实现的基本过程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([问题定义]):::startend --> B(设计算法):::process
B --> C(选择数据结构):::process
C --> D(编写代码):::process
D --> E(调试程序):::process
E --> F{是否有错误}:::decision
F -->|是| D
F -->|否| G([程序完成]):::startend
在这个过程中,我们需要运用各种编程概念和术语。例如,设计算法时可能会用到二分查找、快速排序等算法;选择数据结构时可能会使用列表、字典等容器;编写代码时需要使用类、方法、变量等概念;调试程序时需要处理各种错误,如编译时错误、运行时错误等。
3. 总结与应用建议
3.1 知识总结
本文详细介绍了二进制数、位运算和编程术语。二进制数是计算机底层的数字表示方式,理解其转换方法(如十进制与二进制的相互转换)和补码表示对于理解计算机的工作原理至关重要。位运算(如与、或、异或、取反和移位运算)在编程中可用于高效地处理数据。编程术语则涵盖了类与对象、函数与方法、算法与数据结构、编程概念等多个方面,是编程学习和实践的基础。
3.2 应用建议
3.2.1 二进制数与位运算的应用
- 数据压缩 :位运算可用于对数据进行压缩,减少存储空间。例如,通过位操作可以将多个布尔值存储在一个整数中。
- 权限管理 :使用位运算可以方便地管理用户权限。例如,每个权限可以用一个二进制位表示,通过与、或运算可以组合和检查权限。
- 算法优化 :在某些算法中,使用位运算可以提高算法的效率。例如,在计算 2 的幂次方时,使用左移运算比乘法运算更高效。
3.2.2 编程术语的应用
- 面向对象编程 :理解类与对象相关术语(如抽象类、子类、继承、多态等)对于进行面向对象编程至关重要。通过合理设计类和对象,可以提高代码的可维护性和可扩展性。
- 算法设计 :掌握算法相关术语(如二分查找、快速排序、大 O 表示法等)可以帮助我们设计出更高效的算法。在解决实际问题时,选择合适的算法可以显著提高程序的性能。
- 调试与优化 :了解错误处理和调试相关术语(如编译时错误、运行时错误、调试器等)可以帮助我们快速定位和解决程序中的问题。同时,理解变量作用域、运算符优先级等概念可以避免编写容易出错的代码。
3.3 学习建议
- 多实践 :通过编写代码来实践二进制数转换、位运算和使用各种编程术语。可以从简单的示例开始,逐渐增加难度。
- 阅读优秀代码 :阅读优秀的开源代码,学习他人如何运用这些知识和术语。可以从一些经典的 Python 项目开始,分析其代码结构和实现思路。
- 深入学习 :对于感兴趣的领域,可以深入学习相关的知识。例如,如果对算法设计感兴趣,可以学习更多的算法和数据结构;如果对面向对象编程感兴趣,可以学习设计模式等相关内容。
总之,二进制数、位运算和编程术语是编程学习的基石,掌握这些知识对于成为一名优秀的程序员至关重要。希望本文能帮助你更好地理解和应用这些知识。
超级会员免费看
58

被折叠的 条评论
为什么被折叠?



