菜鸟AI - 让提示词生成更简单! 全站导航 全站导航
AI工具安装 新手教程 进阶教程 辅助资源 AI提示词 热点资讯 技术资讯 产业资讯 内容生成 模型技术 AI信息库

已有账号?

首页 > AI教程 > 计算机基础常识:软件开发新手五大核心技能排行(二)
进阶教程

计算机基础常识:软件开发新手五大核心技能排行(二)

2026-05-30
阅读 0
热度 0
作者 菜鸟AI编辑部
摘要

摘要

计算机采用二进制因物理上易实现两种稳定状态,且布尔代数对应逻辑电路。二进制与十进

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

计算机为什么要用二进制?这其实是个挺实在的问题——不是因为它“高级”,而是因为物理上最容易实现两种稳定状态:高电平与低电平、充电与放电、磁化方向的正反。再加上布尔代数天然对应逻辑电路,抗干扰能力还强,二进制就成了那个最优解。

2.1 为什么计算机使用二进制?

二进制转十进制,原理很简单:每一位的权重是2的幂次。比如二进制 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 原码、反码、补码 —— 整数的二进制表示

计算机里表示有符号整数,用的是补码。为什么?因为补码能把减法统一成加法,硬件实现省事多了。

以8位有符号整数为例:

 5 原码: 0000 0101
-5 原码: 1000 0101
 5 反码: 0000 0101
-5 反码: 1111 1010
 5 补码: 0000 0101
-5 补码: 1111 1011 (反码+1)
验证加法:5 + (-5) = 0000 0101 + 1111 1011 = 1 0000 0000 → 丢弃进位,得 0000 0000

为什么8位补码能表示-128?补码范围是-128~127,-128的补码是 1000 0000,而1270111 1111。注意,-128没有对应的原码和反码,这是补码特有的。

用Ja va演示补码加法:

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", 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),包括英文字母、数字、标点和控制字符。演示一下:

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)  # 你好,世界

来源:互联网

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

同类文章推荐

相关文章推荐

更多