为什么计算机用补码存储数据

俗话说:眼看他起高楼,眼看他宴宾客,眼看他楼塌了。我想这句话放在我们做技术的,也很合适 —— 基础不牢,地动山摇。

尽管我们很多人不是做基础开发的,但是操作系统、数据结构和算法、计算机网络、设计模式 …… 这些 IT 领域的基础性学科,对于我们来说其实挺重要的。

本文将尝试从理性结合感性的角度去说明为什么计算机用补码存储数据,当我们明白这个问题后,那么,我们就可以去理解另一个衍生问题 —— 数据溢出。我们先来看一段关于数据溢出的 Java 代码片:

/* int是有符号数,32位存储,表示范围是-2^31~2^31-1(即-2147483648~2147483647)*/
int i = Integer.MAX_VALUE; // i为2147483647
i += 1; // 加1后,引起数据溢出,则i为-2147483648

加法器

计算机只有加法器没有减法器,两个数的减法运算会被计算机转换为加法运算。

模、补数

在日常生活中,有许多化减为加点例子。我们以最平常的钟表为例,时针逆时针拨 x(0<x<12)格和时针顺时针拨12-x格,效果是相同的。比如,时针从10点调整到5点有以下两种方法:

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。