软件开发新手入门五大核心技能之计算机基础常识(二)

简介: 教程来源 http://htnus.cn/ 本章详解计算机底层语言——二进制:从物理实现优势出发,讲解二进制与十进制互转、原反补码原理(含-128特例)、IEEE 754浮点数标准(解释0.1+0.2≠0.3),以及ASCII到Unicode/UTF-8的字符编码演进与乱码修复。

第二章 二进制与数据编码 —— 计算机的语言

2.1 为什么计算机使用二进制?
计算机使用二进制的原因:物理上容易实现两种稳定状态(高/低电平、充电/放电、磁化方向),抗干扰能力强,布尔代数直接对应逻辑电路。

二进制转十进制:

二进制 1011.01 = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 0×2⁻¹ + 1×2⁻²
            = 8 + 0 + 2 + 1 + 0 + 0.25 = 11.25

十进制转二进制(整数部分除2取余):

13 除以 2 得 6 余 1
6 除以 2 得 3 余 0
3 除以 2 得 1 余 1
1 除以 2 得 0 余 1
从下往上读:1101

代码实现进制转换:

# 任意进制转换
def decimal_to_binary(n):
    if n == 0:
        return "0"
    result = ""
    while n > 0:
        result = str(n % 2) + result
        n //= 2
    return result

print(decimal_to_binary(13))  # "1101"
print(bin(13))                # "0b1101"

# 十进制转十六进制
print(hex(255))   # "0xff"
print(hex(42))    # "0x2a"

2.2 原码、反码、补码 —— 整数的二进制表示
计算机使用补码表示有符号整数,因为补码可以将减法统一为加法。
image.png
以 8 位有符号整数为例:

+5 原码: 0000 0101
-5 原码: 1000 0101

+5 反码: 0000 0101
-5 反码: 1111 1010

+5 补码: 0000 0101
-5 补码: 1111 1011  (反码+1)

验证加法:5 + (-5) = 0
  0000 0101
+ 1111 1011
= 1 0000 0000 -> 丢弃进位,得 0000 0000

为什么 -128 能表示(8位补码范围 -128~127):

-128 补码:1000 0000
127 补码:0111 1111
-128 没有对应的原码和反码,是补码特有的。

代码模拟补码加法:

public class ComplementDemo {
    public static void main(String[] args) {
        // 观察溢出
        byte a = 127;
        byte b = 1;
        byte c = (byte)(a + b);  // 溢出
        System.out.println(c);     // -128

        // 手动模拟补码加法
        int x = 5, y = -3;
        System.out.printf("%d + %d = %d\n", x, y, x + y);

        // 查看二进制表示
        System.out.println(Integer.toBinaryString(5));   // 101
        System.out.println(Integer.toBinaryString(-3));  // 11111111111111111111111111111101
    }
}

2.3 浮点数的 IEEE 754 标准
浮点数在计算机中不精确,因为用有限的二进制位数表示无限小数。

单精度(32位)布局:

符号位(1) | 指数位(8) | 尾数位(23)
S   EEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMM

公式: (-1)^S × 1.M × 2^(E-127)

浮点数精度丢失示例:

# 0.1 的二进制是无限循环 0.0001100110011...
print(0.1 + 0.2)          # 0.30000000000000004

# 用 Decimal 避免
from decimal import Decimal, getcontext
getcontext().prec = 50    # 设置精度
print(Decimal('0.1') + Decimal('0.2'))  # 0.3

# 浮点数比较的正确方式
def float_equal(a, b, epsilon=1e-10):
    return abs(a - b) < epsilon

print(float_equal(0.1 + 0.2, 0.3))  # True

2.4 字符编码 —— 从 ASCII 到 Unicode
ASCII(美国信息交换标准代码): 7位表示 128 个字符(0-127),包括英文字母、数字、标点、控制字符。

# ASCII 码演示
for code in range(65, 91):
    print(f"{code}: {chr(code)}")  # 65:A, 66:B, ...

中文字符编码演进:

GB2312:中国国家标准,包含 6763 个汉字

GBK:扩展版,包含 21003 个汉字

Big5:繁体中文常用

Unicode:统一所有字符,每个字符有唯一码点(如 U+4E2D 是“中”)

UTF-8:变长编码,兼容 ASCII,是互联网最流行的实现
UTF-8 编码规则:
image.png
代码演示乱码与修复:

# 常见乱码原因:编码和解码方式不一致
text = "你好,世界"

# 用 UTF-8 编码
utf8_bytes = text.encode('utf-8')
print(utf8_bytes)  # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'

# 错误地用 GBK 解码 -> 乱码
garbled = utf8_bytes.decode('gbk', errors='ignore')
print(garbled)  # 输出乱码: "浣犲ソ锛屼笘鐣"

# 正确解码
correct = utf8_bytes.decode('utf-8')
print(correct)  # 你好,世界

来源:
http://unbgv.cn/

相关文章
|
1月前
|
监控 安全 Go
4.2V锂电池充电芯片IC,线性方案外围仅需两电容一电阻
平芯微推出4.2V锂电池充电IC系列,覆盖500mA–2A电流,含PW4054H/PW4057H(线性,小体积)、PW4056HH(1A+NTC温控)及PW4213(2A同步降压,高效率宽压),集成OVP、三段式充电、热反馈等保护,广泛适配穿戴、移动电源、工业终端等场景。
|
1月前
|
SQL 网络协议 NoSQL
软件开发新手入门五大核心技能之计算机基础常识(五)
教程来源 http://vbzcj.cn/ 本章系统讲解网络与数据库核心知识:涵盖OSI/TCP/IP模型、IP/端口、TCP三次握手/四次挥手、HTTP协议、DNS解析;以及SQL基础、索引优化、ACID事务、NoSQL(如Redis)等,理论结合Python实战示例。
|
1月前
|
存储 缓存 固态存储
软件开发新手入门五大核心技能之计算机基础常识(一)
教程来源 http://oieaw.cn/ 本文以“内功”喻计算机基础,系统讲解CPU、内存、存储等硬件原理及冯·诺依曼体系,涵盖指令执行、缓存机制、内存布局、I/O特性等核心知识,并辅以可运行代码与典型问题分析,助程序员夯实底层认知,提升性能优化与系统设计能力。
|
1月前
|
存储 自然语言处理 算法
软件开发新手入门五大核心技能之计算机基础常识(三)
教程来源 http://lemci.cn/ 本章系统讲解数据结构基础:数组(连续存储、O(1)访问)、链表(指针链接、O(1)增删)、栈(LIFO)、队列(FIFO)、哈希表(O(1)查找)、树与图(层次/网络关系),辅以多语言代码实例,揭示高效组织数据的核心逻辑。
|
1月前
|
消息中间件 存储 资源调度
软件开发新手入门五大核心技能之计算机基础常识(四)
教程来源 http://uklgy.cn/ 本章介绍操作系统核心机制:进程/线程模型、IPC通信方式;并发控制中的竞态条件、锁与死锁;虚拟内存与分页机制;文件系统结构及权限管理。辅以Java、Python、C语言实例,深入浅出解析资源调度与内存管理原理。
|
安全 开发工具 git
CTF工具隐写分离神器Binwalk安装和详细使用方法
CTF工具隐写分离神器Binwalk安装和详细使用方法
7067 0
|
1月前
|
机器学习/深度学习 弹性计算 编解码
ecs.c9i.2xlarge——阿里云8核16G云服务器ECS计算型c9i实例,新一代企业级x86计算架构
阿里云ECS全新计算型c9i实例(8核16G),基于CIPU架构,搭载Intel Xeon 6982P-C处理器,兼顾高性能计算、高网络吞吐与安全可信能力,适用于机器学习推理、数据分析、视频编码等场景。阿里云服务器ECS官网:https://t.aliyun.com/U/AZBUsA
326 122
|
2月前
|
人工智能 安全 专有云
深度访谈:阿里云×平头哥,模型推理提升13倍背后的秘密
2026年初,AI焦点正从“对话”转向“推理”:OpenClaw爆火、AI Coding成新基建、大模型迈向Agent化执行。算力瓶颈、成本压力与安全预警交织,推理效率成为产业主战场。本文深度对话阿里云与平头哥专家,剖析软硬协同、MoE优化、量化压缩等关键技术演进,揭示国产AI基础设施如何通过系统级创新突破“不可能三角”。
331 1
|
3月前
|
弹性计算 运维
新手必藏!阿里云服务器控制台首页打开教程,附直达链接
阿里云控制台首页是统一产品入口,悬停左上角“控制台首页”即可快速访问全量云服务;同时提供ECS、轻量应用服务器等核心产品的官方直达链接,提升运维效率。
598 3
|
搜索推荐 Python
为啥说选择排序是不稳定的
选择排序是一种简单但不稳定的排序算法。它通过每轮选择最小元素并交换位置来实现排序,但这种交换可能破坏相同值元素的相对顺序。例如对数组 `[5, 8, 5, 2]` 排序后,两个 `5` 的顺序会发生变化,从而证明其不稳定性。
880 0