CSP-J 第一轮(初赛)通关集训 · 第一天
Day 1 上午:计算机系统常识、语言体系、网络与 NOI 规则(3小时)
第一部分:核心知识精讲与考点速记
1. 计算机历史、图灵机与著名人物
- 阿兰·图灵(Alan Turing):
- 英国数学家、逻辑学家,被称为“计算机科学之父”和“人工智能之父”。
- 提出图灵机(Turing Machine):一种抽象的数学计算模型,确立了现代计算机的理论基础。
- 提出图灵测试(Turing Test):测试机器是否具有人类同等或无法区分的智能。
- 图灵奖(Turing Award):由 ACM 于 1966 年设立,是计算机界的最高荣誉(相当于计算机界的诺贝尔奖)。华人唯一得主为姚期智(2000 年获奖)。
- 约翰·冯·诺依曼(John von Neumann):
- 美籍匈牙利数学家,被称为“现代计算机之父”。
- 确立了冯·诺依曼架构,其核心思想是:“存储程序与程序控制”(程序和数据预先存放在存储器中,由计算机自动顺序执行)。
- 克劳德·香农(Claude Shannon):
- 信息论的创始人,将布尔代数引入开关电路,提出“信息熵”概念,奠定了数字通信的理论基础。
- 戈登·摩尔(Gordon Moore)与摩尔定律:
- 摩尔定律(Moore's Law):微处理器芯片上的晶体管数量约每 18 个月(或 1.5~2 年)翻一番,性能提升一倍,价格下降一半(这是对产业发展趋势的经验预测,并非物理定律)。
- 威廉·肖克利(William Shockley)等:
- 发明晶体管,于 1956 年荣获诺贝尔物理学奖。晶体管取代电子管,开启了微电子革命。
- 电子计算机发展四阶段:
- 第一代(1946~1950年代):电子管(代表:1946 年美国宾夕法尼亚大学研制的 ENIAC,最早用于军事弹道计算)。
- 第二代(1950年代末~1960年代):晶体管。
- 第三代(1960年代~1970年代):中小规模集成电路。
- 第四代(1970年代至今):超大规模集成电路(VLSI)。
2. 程序设计语言与编译器
- 语言分类:
- 机器语言(低级语言):由二进制代码(0 和 1)组成,计算机硬件能直接识别和执行,可移植性差。
- 汇编语言(低级语言):使用助记符(如
ADD,MOV)代替机器指令,必须通过汇编器翻译成机器语言才能运行,可直接访问硬件寄存器。 - 高级语言:接近人类自然语言和数学语言,易读易写,跨平台性好(如 C, C++, Java, Python, Pascal, Fortran, Basic 等)。
- 高级语言的执行方式:
- 编译型语言:通过编译器(Compiler)将全部源代码一次性翻译为目标机器码文件(如
.exe,.o),再链接执行。运行速度快(如 C, C++, Pascal, Fortran, Go)。 - 解释型语言(脚本语言):通过解释器(Interpreter)对源代码逐行读取、解释并立即执行。跨平台灵活,但执行速度较慢(如 Python, JavaScript, PHP, Shell)。
- 编译型语言:通过编译器(Compiler)将全部源代码一次性翻译为目标机器码文件(如
- 面向对象 vs 面向过程:
- 面向过程(POP):以过程/函数为核心,“自顶向下,逐步求精”(如 C, Pascal, Fortran, Basic)。
- 面向对象(OOP):以对象/类为核心,三大基本特性为封装、继承、多态(如 C++, Java, Python, C#)。Smalltalk 是早期的面向对象语言。
- 程序构建核心流程:
$$\text{源代码 (.cpp)} \xrightarrow{\text{预编译/编译}} \text{目标文件 (.o/.obj)} \xrightarrow{\text{链接器 (Linker)}} \text{可执行文件 (.exe/ELF)}$$
- 编译器的主要功能是将高级语言代码转换为目标机器语言代码,并进行语法语义检查。
- 代码中的注释只给程序员阅读,编译时会被自动剔除,完全不影响程序的执行效率。
3. 计算机硬件系统与体系结构
- 冯·诺依曼架构五大部件:
- 运算器(ALU):负责算术运算(加减乘除)和逻辑运算(与或非)。
- 控制器(CU):统一指挥和协调计算机各部件工作,发出控制信号。
- 存储器(Memory):存放程序和数据。
- 输入设备(Input):将人类信息转为机器信号(键盘、鼠标、扫描仪、摄像头)。
- 输出设备(Output):将处理结果呈现给用户(显示器、打印机、音响)。
- CPU(中央处理器) = 运算器 + 控制器 + 寄存器组。芯片制造的核心原材料是硅(Si)。
- 总线(Bus):连接 CPU、内存与 I/O 设备的信息公共通道,按功能分为:
- 数据总线(DB):传输数据。
- 地址总线(AB):传送地址信号,决定了 CPU 的最大寻址空间。
- 32 位地址总线最大寻址能力:$2^{32}\text{ B} = 4\text{ GB}$。
- 64 位机器相比 32 位机器的核心优势:寻址空间极大扩展,支持更大内存和 64 位整型运算。
- 控制总线(CB):传送控制信号。
- 存储系统层级(金字塔结构):
$$\text{寄存器(CPU内)} \to \text{高速缓存(Cache)} \to \text{主存(RAM/ROM)} \to \text{外存(SSD/硬盘/U盘/光盘)}$$
- 速度越往上越快,成本越往上越高,容量越往下越大。
- RAM(随机存取存储器 / 运行内存):读写速度快,断电后数据全部丢失(易失性)。
- ROM(只读存储器):预先写入(如存放主板 BIOS 固件),断电后数据不丢失。
- Cache(高速缓冲存储器):介于 CPU 与主存之间,解决 CPU 运算速度极快而主存读写较慢的速度不匹配矛盾。
- 外存(辅存):硬盘、固态硬盘(SSD)、光盘、U 盘,断电后数据长久保存。
- 注意:计算机启动必须依赖内存(主存),缺少内存无法开机。
4. 操作系统基础
- 定义与定位:操作系统(OS)是直接运行在裸机上的最底层系统软件,用于控制和管理计算机系统的全部软硬件资源,并为用户和应用程序提供接口。
- 常见操作系统:
- PC 端:Windows, macOS, Linux (Ubuntu, CentOS, NOI Linux), UNIX, DOS。
- 移动端:Android, iOS, HarmonyOS。
- 绝对不是操作系统的干扰项:
- Office/WPS(办公软件)、Photoshop(图像处理)、Notepad(文本编辑)、HTML(超文本标记语言)、Sybase/MySQL(数据库管理系统)。
- 操作系统核心概念:
- 中断(Interrupt):CPU 在执行程序过程中,遇到急需处理的突发事件,暂停当前程序转去执行中断处理程序,处理完毕后返回原断点继续执行。
- BIOS(基本输入输出系统):固化在主板 ROM 芯片上的底层系统,开机时负责硬件自检(POST)和引导操作系统。
- Linux 可执行文件:在 Linux 下,文件是否可执行由文件权限(
rwx)决定,没有固定的默认扩展名(Windows 常见扩展名为.exe,.com,.bat)。 - 计算机病毒:人为编制的具有破坏性、自我复制和传播能力的恶意程序指令代码。
5. 计算机网络基础
- 网络分类(按覆盖范围):
- 局域网(LAN):几米到几公里(如机房、校园网)。
- 城域网(MAN):一个城市范围。
- 广域网(WAN):跨城市、国家乃至全球(如互联网 Internet)。
- 通信介质与技术:
- 有线:双绞线(网线)、同轴电缆、光纤。
- 无线:Wi-Fi(无线局域网 WLAN)、蓝牙(短距离 WPAN)、蜂窝移动网络(4G/5G)。
- 以太网(Ethernet)属于有线局域网技术。
- IP 地址体系:
- IPv4:32 位(4 字节),通常表示为点分十进制形式(如
192.168.1.1),每个字节取值范围为 $0 \sim 255$(若某段出现 256 则非法)。 - IPv6:128 位(16 字节),采用冒号十六进制表示,彻底解决 IPv4 地址枯竭问题。
- 中国国家顶级域名:
.cn。
- IPv4:32 位(4 字节),通常表示为点分十进制形式(如
- 常见网络应用协议(单选题常考):
- HTTP / HTTPS:超文本传输协议(网页浏览)。
- FTP:文件传输协议(远程上传/下载文件)。
- SMTP:简单邮件传输协议(用于发送邮件)。
- POP3 / IMAP:邮局协议 / 互联网邮件访问协议(用于接收邮件)。
- DNS:域名系统(将网址域名解析为 IP 地址)。
- TCP/IP:互联网最核心的通信协议族(TCP 提供可靠传输,IP 负责寻址与路由)。
6. NOI 系列活动与竞赛规则
- 创办历史:由中国计算机学会(CCF)于 1984 年创办,官网为
http://www.noi.cn/。 - 统一评测环境:自 2022 年起,NOIP / CSP-J/S 系列赛事全面停止使用 Pascal 和 C 语言,唯一支持 C++。官方评测系统环境为 NOI Linux。
- 考场规则红线:
- 允许携带:黑色/蓝色签字笔、铅笔、橡皮、准考证、有效身份证件。
- 严禁携带:手机、手表、U 盘、移动硬盘、电子词典、计算器等任何电子与存储设备。
第二部分:上午精选真题实战(1~35题)
-
以下哪个是面向对象的高级语言? A. 汇编语言 B. C++ C. Fortran D. Basic
-
下列不属于面向对象程序设计语言的是( )。 A. C B. C++ C. Java D. Python
-
以下哪种功能没有涉及 C++ 语言的面向对象特性支持? A. printf B. 类成员函数 C. class / struct D. 派生类
-
Pascal、C、C++ 属于( )。 A. 面向对象语言 B. 脚本语言 C. 解释性语言 D. 编译性语言
-
关于汇编语言,下列说法错误的是( )。 A. 汇编语言与硬件密切相关 B. 汇编语言代码量通常较大 C. 汇编语言可以直接访问寄存器 D. 汇编语言已经被现代技术完全淘汰
-
关于程序设计语言,下列说法正确的是( )。 A. 代码中的注释会严重影响程序运行速度 B. 高级语言不能用于低端硬件设备的开发 C. 高级语言编写的程序比机器语言更容易跨平台移植 D. 以上说法均不正确
-
编译器的主要功能是( )。 A. 将源程序翻译成目标机器语言代码 B. 重新组合源程序的数据结构 C. 将低级语言程序转换为高级语言程序 D. 将高级语言转换为另一种高级语言
-
CPU、存储器和 I/O 设备之间通常是通过( )连接起来的。 A. 接口电路 B. 系统总线 C. 控制线 D. 系统文件
-
计算机在运行过程中,断电后所存储数据会全部丢失的存储器是( )。 A. RAM B. ROM C. 机械硬盘 D. 光盘
-
计算机科学界的最高奖项是( )。 A. 菲尔兹奖 B. 诺贝尔奖 C. 图灵奖 D. 普利策奖
-
Pentium(奔腾)、酷睿(Core)、赛扬(Celeron)是指( )。 A. 电脑生产厂家 B. 硬盘型号 C. CPU 型号 D. 显示器型号
-
下列关于计算机硬件的说法中,正确的是( )。 A. CPU 主要负责执行数据运算和程序控制 B. 存储器中的所有信息在任何时候都不会丢失 C. 相同屏幕尺寸的显示器其分辨率必然相同 D. 计算机只能通过 Wi-Fi 无线上网
-
计算机断电后,下列设备中仍能长久保存数据的是( )。 A. RAM B. 高速缓存(Cache) C. 显存 D. 固态硬盘(SSD)
-
下列企业中,不属于 CPU 芯片主要生产厂商的是( )。 A. Intel B. AMD C. Microsoft D. IBM
-
32 位机器和 64 位机器的核心技术区别主要体现在( )。 A. 显示器色彩位数 B. 硬盘传输协议 C. CPU 寻址空间与运算能力 D. 中文输入法版本
-
计算机内部存储和处理数据的基本单位是( )。 A. bit(比特) B. Byte(字节) C. GB(吉字节) D. KB(千字节)
-
计算机最早也是最主要的应用领域是( )。 A. 数值计算 B. 人工智能 C. 机器人控制 D. 办公自动化
-
计算机如果缺少下列哪种部件,将根本无法正常启动运行?( ) A. 内存 B. 鼠标 C. U 盘 D. 摄像头
-
制造计算机集成电路芯片最主要的基础原材料是( )。 A. 硅 B. 铜 C. 锗 D. 铝
-
世界上第一台通用电子数字计算机 ENIAC 属于( )计算机。 A. 电子管 B. 晶体管 C. 中小规模集成电路 D. 超大规模集成电路
-
32 位地址总线的 CPU,其理论上最大可直接寻址的内存物理空间为( )。 A. 128 KB B. 1 MB C. 1 GB D. 4 GB
-
著名的“摩尔定律”指出,集成电路芯片上可容纳的元器件数目大约每隔( )个月便会翻一番。 A. 1 B. 6 C. 18 D. 36
-
寄存器(Register)是计算机中哪一部件的重要内部组成部分?( ) A. 硬盘 B. 高速缓存 C. 内存 D. CPU
-
冯·诺依曼体系结构计算机的核心设计思想是( )。 A. 开关电路理论 B. 半导体物理 C. 存储程序和程序控制 D. 键盘人机交互
-
现代计算机为了缓解 CPU 与主存之间读写速度不匹配的瓶颈,特地引入了( )。 A. 寄存器 B. 高速缓存(Cache) C. 闪存 D. 外存
-
操作系统在计算机系统中的核心作用是( )。 A. 将高级语言源程序编译为目标代码 B. 负责各类业务数据的永久存储 C. 控制和管理计算机系统的软硬件资源 D. 建立各种外部硬件设备的物理连接
-
在计算机操作系统中,“中断”机制的本质含义是指( )。 A. 彻底停止正在执行的程序 B. 暂停当前程序以响应并处理突发紧急事件 C. 计算机出现硬件故障而停机 D. 操作系统死机蓝屏
-
下列各项软件中,属于操作系统的是( )。 A. Windows 11 B. Microsoft Office Word C. Adobe Photoshop D. WPS Office
-
下列各项中,不属于操作系统的是( )。 A. Linux B. macOS C. Android D. HTML
-
互联网上用于发送电子邮件(E-mail)的核心网络协议是( )。 A. SMTP B. UDP C. P2P D. FTP
-
下列 IPv4 地址中,书写格式存在严重错误的是( )。 A. 162.105.135.27 B. 192.168.0.1 C. 256.256.129.1 D. 10.0.0.1
-
IPv4 协议采用 32 位二进制地址,而新一代 IPv6 协议采用( )位二进制地址。 A. 40 B. 48 C. 64 D. 128
-
中国的国家顶级域名代码是( )。 A. .cn B. .ch C. .chn D. .china
-
全国青少年信息学奥林匹克竞赛(NOI)系列活动的主办单位是( )。 A. 国家教育部 B. 国家科技部 C. 共青团中央 D. 中国计算机学会(CCF)
-
在参加 CCF NOI / CSP-J 认证考试时,下列物品中严禁带入考场的是( )。 A. 黑色签字笔 B. 保暖外衣 C. 个人 U 盘 D. 2B 铅笔
第三部分:上午真题解析与答案速查
- 【答案】B
【解析】 C++ 是一门支持面向对象编程(OOP)的高级语言;汇编语言属于低级语言;Fortran 和 Basic 是典型的早期面向过程语言。 - 【答案】A
【解析】 C 语言是纯粹的面向过程高级语言;C++、Java、Python 均支持面向对象编程。 - 【答案】A
【解析】printf是 C 语言标准库中的格式化输出函数,属于面向过程范畴;成员函数、class/struct封装及派生类均是 C++ 面向对象的核心特性。 - 【答案】D
【解析】 Pascal、C、C++ 在运行前都必须通过编译器将源代码整体编译链接为机器可执行文件,属于编译性语言。 - 【答案】D
【解析】 汇编语言并没有被淘汰,在底层驱动开发、嵌入式系统核心模块、操作系统内核及对性能要求极高的实时场景中依然被广泛使用。 - 【答案】C
【解析】 高级语言屏蔽了具体硬件底层细节,具有极强的跨平台通用性;注释在编译阶段会被编译器完全忽略,绝不影响运行效率。 - 【答案】A
【解析】 编译器的核心功能就是将高级语言源代码转换成计算机硬件可直接识别的目标机器代码(机器指令)。 - 【答案】B
【解析】 冯·诺依曼架构通过系统总线(包括数据总线、地址总线、控制总线)连接 CPU、存储器与各类 I/O 设备。 - 【答案】A
【解析】 RAM(随机存取存储器/运行内存)具有易失性,断电后电荷迅速消散,数据全部丢失;ROM、机械硬盘和光盘均为非易失性介质。 - 【答案】C
【解析】 图灵奖被公认为计算机科学界的最高学术荣誉,菲尔兹奖为数学界最高奖,诺贝尔奖无计算机科学类别。 - 【答案】C
【解析】 奔腾(Pentium)、酷睿(Core)、赛扬(Celeron)都是著名半导体厂商 Intel 旗下的桌面/服务器级 CPU 系列型号。 - 【答案】A
【解析】 CPU(中央处理器)由运算器和控制器构成,负责运算与控制;内存断电丢失,分辨率由显示芯片和屏幕面板共同决定,上网可通过有线宽带。 - 【答案】D
【解析】 固态硬盘(SSD)属于外部存储介质,采用闪存芯片存储,断电后数据依然完好保存;RAM、Cache、显存均属于易失性存储。 - 【答案】C
【解析】 微软(Microsoft)是全球著名的基础软件与云服务提供商,自身并不研发制造通用 CPU 芯片;Intel、AMD、IBM 均拥有强大的 CPU 研发制造体系。 - 【答案】C
【解析】 32 位与 64 位处理器的本质差异在于通用寄存器的位宽、单次处理数据能力以及地址总线的宽度(直接决定了最大物理内存寻址空间)。 - 【答案】B
【解析】 计算机存储信息的最小单位是 bit(比特,取值 0 或 1),而计算机存储和寻址的基本单位是 Byte(字节,1 Byte = 8 bits)。 - 【答案】A
【解析】 早期研制计算机(如 ENIAC)的最原始初衷是用于军事弹道和复杂科学工程的数值计算。 - 【答案】A
【解析】 内存是程序载入运行的直接物理场所,CPU 必须从内存中读取指令,缺少内存计算机将无法完成开机自检(POST)和引导。 - 【答案】A
【解析】 现代半导体芯片以高纯度的单晶硅(Silicon)晶圆片为核心衬底基材制造。 - 【答案】A
【解析】 1946 年诞生的第一代电子计算机 ENIAC 使用了近 18000 只真空电子管作为核心开关元器件。 - 【答案】D
【解析】 32 位地址总线共可寻址 $2^{32}$ 个不同的内存单元字节地址:$2^{32}\text{ B} = \frac{2^{32}}{1024 \times 1024 \times 1024}\text{ GB} = 4\text{ GB}$。 - 【答案】C
【解析】 英特尔联合创始人戈登·摩尔总结提出:集成电路芯片上可容纳的晶体管数目约每 18 个月增加一倍。 - 【答案】D
【解析】 寄存器是内置于 CPU 芯片内部的极高速临时存储单元,用于存放当前正在参与运算的操作数和指令状态。 - 【答案】C
【解析】 冯·诺依曼架构的最本质精髓就是“存储程序与程序控制”,使计算机能自动高速执行预存程序。 - 【答案】B
【解析】 高速缓冲存储器(Cache)访问速度远高于普通内存,置于 CPU 与主存之间以匹配两者巨大的速度差距。 - 【答案】C
【解析】 操作系统的根本职责是全面统一调度、控制与管理计算机系统的全部硬件设备和软件资源。 - 【答案】B
【解析】 中断机制使 CPU 能异步响应外部 I/O 请求或内部突发异常,是现代多任务操作系统的基石。 - 【答案】A
【解析】 Windows 11 是微软公司的主流 PC 操作系统;其余三项均为运行在 OS 之上的应用软件。 - 【答案】D
【解析】 HTML(超文本标记语言)用于编写网页结构,是一种页面标记语言,不是操作系统。 - 【答案】A
【解析】 SMTP(Simple Mail Transfer Protocol)用于客户端向服务器或邮件服务器之间发送邮件;POP3/IMAP 用于接收邮件。 - 【答案】C
【解析】 IPv4 地址由 4 个 $0 \sim 255$ 之间的十进制数构成,256 超过了单个无符号字节(8位)所能表示的最大值 255。 - 【答案】D
【解析】 IPv6 地址长度扩充到了 128 位二进制,拥有极其庞大的地址池空间。 - 【答案】A
【解析】.cn是我国在国际互联网注册的国家级顶级顶级域名代码。 - 【答案】D
【解析】 全国青少年信息学奥林匹克竞赛(NOI)由中国计算机学会(CCF)全权主办。 - 【答案】C
【解析】 各类外部可移动存储介质(如 U 盘、移动硬盘)严禁带入 NOI 考场,防止考场作弊及病毒破坏。
---
Day 1 下午:进位计数制、数值与字符编码、位运算与逻辑运算(3小时)
第一部分:核心知识精讲与考点速记
1. 计算机存储单位换算
- 基础单位:
- 比特(bit / b):计算机存储的最小数据单元(只有 0 和 1 两种状态)。
- 字节(Byte / B):计算机存储和寻址的基本单位,$1\text{ Byte} = 8\text{ bits}$。
- 二进制倍率梯级(底数为 $1024 = 2^{10}$):
- $1\text{ KB} = 1024\text{ B} = 2^{10}\text{ B}$
- $1\text{ MB} = 1024\text{ KB} = 2^{20}\text{ B} = 8 \times 2^{20}\text{ bits} = 8388608\text{ bits}$
- $1\text{ GB} = 1024\text{ MB} = 2^{30}\text{ B}$
- $1\text{ TB} = 1024\text{ GB} = 2^{40}\text{ B}$
- 两大经典存储容量计算公式:
- 位图图像占用内存空间(字节):
$$\text{文件大小(Byte)} = \frac{\text{水平像素} \times \text{垂直像素} \times \text{颜色深度(bit)}}{8}$$
- 真彩色(32位色):每个像素占 $32\text{ bit} = 4\text{ Byte}$。
- 256 色:$256 = 2^8$,颜色深度为 $8\text{ bit} = 1\text{ Byte}$。
- 黑白二值图:每个像素占 $1\text{ bit}$。
- 汉字点阵字模大小计算(字节):
$$\text{单个汉字存储空间(Byte)} = \frac{\text{点阵行数} \times \text{点阵列数}}{8}$$
- $32 \times 32$ 点阵汉字:$\frac{32 \times 32}{8} = 128\text{ Byte}$。
- 位图图像占用内存空间(字节):
$$\text{文件大小(Byte)} = \frac{\text{水平像素} \times \text{垂直像素} \times \text{颜色深度(bit)}}{8}$$
2. 进位计数制转换全解析
- 常见数制记号:
- 二进制(Binary,以
B或下标 $_2$ 结尾) - 八进制(Octal,以
O或下标 $_8$ 结尾) - 十进制(Decimal,以
D或下标 $_{10}$ 结尾) - 十六进制(Hexadecimal,以
H或下标 $_{16}$ 结尾,包含 $0 \sim 9, \text{A}(10), \text{B}(11), \text{C}(12), \text{D}(13), \text{E}(14), \text{F}(15)$)
- 二进制(Binary,以
- 数制转换方法归纳:
- 任意进制 $R \to$ 十进制:按权展开相加。
- 例:$(101.11)_2 = 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 1 \times 2^{-2} = 4 + 0 + 1 + 0.5 + 0.25 = 5.75_{10}$。
- 例:$(32.1)_8 = 3 \times 8^1 + 2 \times 8^0 + 1 \times 8^{-1} = 24 + 2 + 0.125 = 26.125_{10}$。
- 十进制 $\to$ 二进制:
- 整数部分:“除以 2 逆序取余”。
- 小数部分:“乘以 2 顺序取整”(乘 2 后的整数位写在前面,取出小数部分继续乘 2)。
- 例:将 $13.375_{10}$ 转换为二进制:
- 整数 $13 = 1101_2$。
- 小数 $0.375$:$0.375 \times 2 = 0.75$(取整 0);$0.75 \times 2 = 1.5$(取整 1,余 0.5);$0.5 \times 2 = 1.0$(取整 1)。顺次得到 $0.011_2$。
- 综合结果:$1101.011_2$。
- 二、八、十六进制快速互转:
- 2 进制 $\leftrightarrow$ 8 进制:3 位二进制对应 1 位八进制(按 $4, 2, 1$ 权值相加)。
- 2 进制 $\leftrightarrow$ 16 进制:4 位二进制对应 1 位十六进制(按 $8, 4, 2, 1$ 权值相加)。
- 例:$0.1_{(2)} = 0.1000_{(2)} = 0.8_{(16)} = 0.4_{(8)}$。
- 任意进制 $R \to$ 十进制:按权展开相加。
3. 原码、反码与补码机制
计算机内部所有有符号整数一律采用补码(Two's Complement)进行存储与算术运算。
* 定义规则(以 8 位有符号整数为例):
* 正数:原码 = 反码 = 补码(最高符号位为 0)。
* $+5$:原码 00000101,反码 00000101,补码 00000101。
* 负数:最高符号位为 1。
* 原码:最高位为 1,其余 7 位为该数值绝对值的二进制形式。
* 反码:符号位保持 1 不变,其余各位按位取反(0 变 1,1 变 0)。
* 补码 = 反码 + 1。
* 补码逆向求真值(速算技巧):
* 已知负数补码求真值:符号位不变,数值位直接“减 1 取反”或“取反 + 1”恢复原码。
* 例:补码 10101011 $\to$ 符号位为 1(负数)$\to$ 减 1 得 10101010 $\to$ 取反得原码 11010101 $\to$ 真值为 $-(1 + 4 + 16 + 64) = -85$。
* 数值表示范围(初赛常考):
* $n$ 位无符号整数:$0 \sim 2^n - 1$(8 位为 $0 \sim 255$;32 位为 $0 \sim 2^{32}-1 \approx 4.29 \times 10^9$)。
* $n$ 位有符号整数(补码):$-2^{n-1} \sim 2^{n-1} - 1$。
* 8 位范围:$-128 \sim +127$(-128 补码为 10000000)。
* 32 位 int 范围:$-2^{31} \sim 2^{31}-1$(即 $-2147483648 \sim +2147483647$)。
4. 字符编码与 ASCII 码
- ASCII(美国标准信息交换代码):
- 标准 ASCII 使用 7 位二进制表示 128 个字符,占用 1 个字节(最高位置 0)。
- 必须熟背的 ASCII 码关键基准点:
- 字符
'0'$\to$ $48$('9'为 $48 + 9 = 57$) - 大写字母
'A'$\to$ $65$('Z'为 $65 + 25 = 90$) - 小写字母
'a'$\to$ $97$('z'为 $97 + 25 = 122$) - 大小写转换规律:
'a' - 'A' = 32(小写字母编码比对应大写字母大 32)。
- 字符
5. 逻辑运算与位运算技巧
- 逻辑运算符(结果只有
true或false):!(逻辑非,$\neg$):真变假,假变真。&&(逻辑与,$\wedge$):全真才真,有假则假。||(逻辑或,$\vee$):全假才假,有真则真。- 短路求值特性:
A && B:若A为false,则B根本不会被计算。A || B:若A为true,则B根本不会被计算。
- 按位运算符(对整型的二进制位逐位操作):
&(按位与):同为 1 才是 1,否则为 0。|(按位或):只要有 1 就是 1,全 0 才是 0。^(按位异或):相同为 0,不同为 1(性质:$x \wedge x = 0$,$x \wedge 0 = x$)。~(按位取反):0 变 1,1 变 0(含符号位全取反)。<<(左移):x << k等价于 $x \times 2^k$。>>(右移):x >> k等价于 $\lfloor x / 2^k \rfloor$。
- 三大初赛经典位运算套路:
x & (x - 1):抹去 $x$ 的二进制表示中最右侧的最后一个 1(常用于统计二进制中 1 的个数或判断一个数是否为 2 的幂)。x & -x(lowbit):仅保留 $x$ 二进制最右侧的那个 1(树状数组核心)。- 判断第 $k$ 位是否为 1:
(x >> k) & 1或x & (1 << k)。
第二部分:下午精选真题实战(1~32题)
-
计算机存储容量 1 TB 代表的实际字节数是( )。 A. $2^{10}$ B. $2^{20}$ C. $2^{30}$ D. $2^{40}$
-
二进制数 00100100 与 00010101 进行算术加法运算的结果是( )。 A. 00101000 B. 001010100 C. 01000101 D. 00111001
-
能用 8 位二进制数直接表示的最大无符号十进制整数是( )。 A. 296 B. 133 C. 255 D. 199
-
1 MB 的存储空间大小等价于( )。 A. 10000 字节 B. 1024 字节 C. $1000 \times 1000$ 字节 D. $1024 \times 1024$ 字节
-
二进制小数 0.1 对应的十六进制数表示是( )。 A. 0.8 B. 0.4 C. 0.2 D. 0.1
-
存储 256 种不同的系统状态信息,至少需要( )位二进制数。 A. 6 B. 7 C. 8 D. 9
-
二进制小数 0.1 对应的八进制数表示是( )。 A. 0.8 B. 0.4 C. 0.2 D. 0.1
-
某 8 位有符号整数的补码为 10101011,则其对应的十进制真值是( )。 A. 43 B. -85 C. -43 D. -84
-
分辨率为 $800 \times 600$、色彩深度为 16 位的图像,其所占用的存储空间大约为( )。 A. 937.5 KB B. 4218.75 KB C. 4320 KB D. 2880 KB
-
十进制数 13.375 转换成二进制数后的结果是( )。 A. 1101.011 B. 1011.011 C. 1101.101 D. 1010.01
-
下列四个不同进制的数值中,与其他三项数值不相等的是( )。 A. $(269)_{16}$ B. $(617)_{10}$ C. $(1151)_8$ D. $(1001101011)_2$
-
下列代码段用于统计整型变量 $x$ 二进制表示中 1 的个数,横线处应填入的代码是( )。
cpp int cnt = 0; while (x) { _______; cnt++; }A.x >>= 1B.x &= x - 1C.x |= x >> 1D.x <<= 1 -
在 32 位操作系统中,一个标准的
int整型变量在内存中占用( )个字节。 A. 32 B. 128 C. 4 D. 8 -
二进制数 1011 转换为十进制数是( )。 A. 11 B. 10 C. 13 D. 12
-
二进制数 11.01 转换为十进制数是( )。 A. 3.25 B. 4.125 C. 6.25 D. 11.125
-
十六进制字符
A在十进制系统中所对应的数值是( )。 A. 9 B. 10 C. 15 D. 16 -
十六进制数 $9\text{A}$ 在( )进制系统下的表示结果为 232。 A. 四 B. 八 C. 十 D. 十二
-
已知数字字符
'0'的 ASCII 码值为 48,则数字字符'9'的 ASCII 码值是( )。 A. 39 B. 57 C. 120 D. 视操作系统而定 -
一张容量为 8 GB 的 SD 存储卡,大约可以存储( )张单张大小为 2 MB 的高清数码照片。 A. 1600 B. 2000 C. 4000 D. 16000
-
一个长度为 100 位的二进制正整数,转换为十六进制数表示后,其位数最多为( )位。 A. 7 B. 13 C. 25 D. 无法确定
-
科学记数法表示的浮点数
2E+03所代表的十进制真实数值是( )。 A. 2.03 B. 5 C. 8 D. 2000 -
8 位补码
11111001对应的原码表示是( )。 A. 00000111 B. 01111001 C. 11111001 D. 10000111 -
已知大写字母
'A'的 ASCII 码为 65,则大写英文字母'J'的 ASCII 码是( )。 A. 71 B. 72 C. 73 D. 以上都不是 -
十进制小数 125.125 转换成八进制数是( )。 A. 100.1 B. 175.175 C. 175.1 D. 100.175
-
算式 $(2008)_{10} + (5\text{B})_{16}$ 的十六进制计算结果是( )。 A. $(833)_{16}$ B. $(2089)_{16}$ C. $(4163)_{16}$ D. $(899)_{16}$
-
汉字“北”和“京”分别使用 $32 \times 32$ 点阵字模存储,它们在内存中占用的字节数之和为( )。 A. 512 B. 256 C. 384 D. 128
-
在 C++ 语言中,整型表达式
200 | 10的按位或运算结果是( )。 A. 20 B. 1 C. 220 D. 202 -
二进制数 101.11 转换为十进制数是( )。 A. 6.5 B. 5.5 C. 5.75 D. 5.25
-
八进制数 32.1 转换为十进制数是( )。 A. 24.125 B. 24.250 C. 26.125 D. 26.250
-
计算八进制算式 $(12345670)_8 + (07654321)_8$ 的结果是( )。 A. $(22222221)_8$ B. $(21111111)_8$ C. $(22111111)_8$ D. $(22222211)_8$
-
计算算式 $(101010)_2 + (166)_8$ 的十进制结果是( )。 A. 176 B. 158 C. 160 D. 180
-
执行下列 C++ 代码段后,终端输出的结果是( )。
cpp int x = 255; cout << (x & (x - 1));A. 255 B. 254 C. 128 D. 0
第三部分:下午真题解析与答案速查
- 【答案】D
【解析】 $1\text{ TB} = 1024\text{ GB} = 1024^2\text{ MB} = 1024^3\text{ KB} = 1024^4\text{ B} = (2^{10})^4\text{ B} = 2^{40}\text{ B}$。 - 【答案】D
【解析】 列竖式进行二进制加法(逢二进一):
$$\begin{array}{r@{\quad}l} 00100100_2 \\ + 00010101_2 \\ \hline 00111001_2 \end{array}$$ - 【答案】C
【解析】 8 位无符号二进制数的表示范围是 $00000000_2 \sim 11111111_2$,对应十进制 $0 \sim 2^8 - 1 = 255$。 - 【答案】D
【解析】 计算机中 $1\text{ MB} = 1024\text{ KB} = 1024 \times 1024\text{ 字节}$。 - 【答案】A
【解析】 二进制 $0.1_2 = 1 \times 2^{-1} = 0.5_{10}$;十六进制中 $0.8_{16} = 8 \times 16^{-1} = \frac{8}{16} = 0.5_{10}$,因此二者完全相等。 - 【答案】C
【解析】 $n$ 位二进制最多可表示 $2^n$ 种状态,令 $2^n \ge 256$,解得 $n \ge 8$。 - 【答案】B
【解析】 二进制 $0.1_2 = 0.5_{10}$;八进制 $0.4_8 = 4 \times 8^{-1} = \frac{4}{8} = 0.5_{10}$。 - 【答案】B
【解析】 最高位为 1 说明为负数。补码10101011减 1 得到反码10101010,数值位取反得到原码11010101,其真值为 $-(64 + 16 + 4 + 1) = -85$。 - 【答案】A
【解析】 图像大小计算:$\frac{800 \times 600 \times 16\text{ bits}}{8 \times 1024\text{ B/KB}} = \frac{960000\text{ B}}{1024} = 937.5\text{ KB}$。 - 【答案】A
【解析】 整数 $13 = 1101_2$;小数 $0.375 \times 2 = 0.75$(0),$0.75 \times 2 = 1.5$(1),$0.5 \times 2 = 1.0$(1),顺次得 $0.011_2$,拼合为 $1101.011_2$。 - 【答案】D
【解析】 A 选项 $(269)_{16} = 2 \times 256 + 6 \times 16 + 9 = 617$;B 选项即 617;C 选项 $(1151)_8 = 1 \times 512 + 1 \times 64 + 5 \times 8 + 1 = 617$;D 选项 $(1001101011)_2 = 512 + 64 + 32 + 8 + 2 + 1 = 619 \ne 617$。 - 【答案】B
【解析】 经典位运算性质:x &= (x - 1)每次操作恰好消除 $x$ 二进制中最右边的 1,循环执行直到 $x$ 为 0,执行次数即为 1 的个数。 - 【答案】C
【解析】 在 32 位/64 位 C++ 编译环境下,标准int类型均占用 4 个字节(32 位)。 - 【答案】A
【解析】 $1011_2 = 1 \times 8 + 0 \times 4 + 1 \times 2 + 1 \times 1 = 11$。 - 【答案】A
【解析】 $11.01_2 = 2 + 1 + 0 \times 0.5 + 1 \times 0.25 = 3.25_{10}$。 - 【答案】B
【解析】 十六进制数码依次为 $0 \sim 9, \text{A}(10), \text{B}(11), \text{C}(12), \text{D}(13), \text{E}(14), \text{F}(15)$。 - 【答案】B
【解析】 $(9\text{A})_{16} = 9 \times 16 + 10 = 154_{10}$。代入八进制验证:$(232)_8 = 2 \times 64 + 3 \times 8 + 2 = 128 + 24 + 2 = 154_{10}$,两者相等。 - 【答案】B
【解析】 数字字符 ASCII 码是连续编码的:'9' = '0' + 9 = 48 + 9 = 57。 - 【答案】C
【解析】 $8\text{ GB} = 8 \times 1024\text{ MB} = 8192\text{ MB}$。可存照片张数 $\frac{8192}{2} = 4096 \approx 4000$ 张。 - 【答案】C
【解析】 4 位二进制对应 1 位十六进制,100 位二进制转换为十六进制的位数为 $\lceil 100 / 4 \rceil = 25$ 位。 - 【答案】D
【解析】 科学记数法2E+03即 $2 \times 10^3 = 2000$。 - 【答案】D
【解析】 补码11111001最高位为 1 说明是负数,减 1 得反码11111000,数值位取反得到原码10000111。 - 【答案】D
【解析】 大写字母'A'为 65,则'J'为 $65 + (10 - 1) = 74$。选项 A、B、C 均为错误数字,故选 D。 - 【答案】C
【解析】 整数 $125 = 1 \times 64 + 7 \times 8 + 5 = (175)_8$;小数 $0.125 \times 8 = 1.0$(取整 1),合起来即为 $175.1_8$。 - 【答案】A
【解析】 $(5\text{B})_{16} = 5 \times 16 + 11 = 91_{10}$。和为 $2008 + 91 = 2099_{10}$。将 2099 转为十六进制:$2099 \div 16 = 131$ 余 3;$131 \div 16 = 8$ 余 3;$8 \div 16 = 0$ 余 8。从后往前拼合得到 $(833)_{16}$。 - 【答案】B
【解析】 单个 $32 \times 32$ 点阵汉字需 $\frac{32 \times 32}{8} = 128$ 字节,两个汉字共需 $128 \times 2 = 256$ 字节。 - 【答案】D
【解析】 将十进制转二进制按位或:$200_{10} = 11001000_2$,$10_{10} = 00001010_2$。$11001000_2 \mid 00001010_2 = 11001010_2 = 128 + 64 + 8 + 2 = 202$。 - 【答案】C
【解析】 $101.11_2 = 4 + 0 + 1 + 0.5 + 0.25 = 5.75_{10}$。 - 【答案】C
【解析】 $32.1_8 = 3 \times 8 + 2 \times 1 + 1 \times 0.125 = 24 + 2 + 0.125 = 26.125_{10}$。 - 【答案】D
【解析】 列竖式进行八进制加法(逢八进一):
$$\begin{array}{r@{\quad}l} 12345670_8 \\ + 07654321_8 \\ \hline 22222211_8 \end{array}$$ - 【答案】C
【解析】 $(101010)_2 = 32 + 8 + 2 = 42_{10}$;$(166)_8 = 1 \times 64 + 6 \times 8 + 6 = 118_{10}$。和为 $42 + 118 = 160$。 - 【答案】B
【解析】 $x = 255 = 11111111_2$,$x - 1 = 254 = 11111110_2$。$255\ \&\ 254 = 254$。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com