首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从二进制到字符:解锁计算机语言的秘密

从二进制到字符:解锁计算机语言的秘密

原创
作者头像
找Bug
发布2025-01-17 21:18:23
发布2025-01-17 21:18:23
19600
代码可运行
举报
文章被收录于专栏:你的Bug我做主你的Bug我做主
运行总次数:0
代码可运行

在计算机的世界里,所有的一切最终都可以归结为二进制的0和1。这些简单的符号不仅能代表数字,还能表示字符,甚至复杂的图片和视频。那么,计算机是如何一步步把这些冷冰冰的二进制变成我们看得懂的字符的呢?让我们从头开始,探索这段充满魔法的旅程。

一、二进制:计算机的起点

二进制是计算机的“母语”,一切从0和1开始。为什么计算机选择二进制呢?因为电路系统只有两种状态:

0:低电平,电流关闭。

1:高电平,电流打开。

每一位二进制(bit)就像一个开关,用多个开关的组合可以表示更大的数字。比如:

二进制:101 = 十进制:5

二进制:1111 = 十进制:15

代码演示:二进制表示数字

代码语言:javascript
代码运行次数:0
运行
复制
public class Test {    public static void main(String[] args) {        int decimal=10;        System.out.println("十进制10的二进制是:"+Integer.toBinaryString(decimal));    }}

输出:

代码语言:javascript
代码运行次数:0
运行
复制
十进制10的二进制是:1010

二、十六进制:让二进制更易读

虽然二进制对计算机来说很简单,但对人类来说却不够直观。所以我们发明了十六进制,每4位二进制压缩成一个十六进制符号:

二进制:1010 → 十六进制;A

二进制:11111111 → 十六进制;FF

转换规则

将二进制按每4位分组,直接替换为对应的十六进制:

11011111 → DF

代码演示:二进制与十六进制转换

代码语言:javascript
代码运行次数:0
运行
复制
public class Test{    public static void main(String[]args){        int decimal=255;        System.out.println("十进制255的十六进制是:"+Integer.toHexString(decimal).toUpperCase());    }}

输出:

代码语言:javascript
代码运行次数:0
运行
复制
十进制255的十六进制是:FF

三、补码:让负数“现形”

计算机不仅要表示正数,还要表示负数。于是,引入了补码作为标准表示方法。

为什么用补码?

补码的设计让加减法电路更简单。

例如,5-3可以直接看作5+(-3),只需要加法运算即可。

补码的规则

正数的补码=原码。

负数的补码=原码取反+1。

举例:

5的二进制:00000101

-5的补码:11111011

特别注意:在8位系统中,-128是最小值,补码形式为10000000。

代码演示:补码计算

代码语言:javascript
代码运行次数:0
运行
复制
publicclassComplementExample{publicstaticvoidmain(String[]args){intpositive=5;intnegative=-5;System.out.println("正数5的补码:"+Integer.toBinaryString(positive));System.out.println("负数-5的补码:"+Integer.toBinaryString(negative));}}

输出:

代码语言:javascript
代码运行次数:0
运行
复制
正数5的补码:101负数-5的补码:11111111111111111111111111111011

因为java版本是32位的,所以负数补码是32位。

特殊补码案例

1、0 的补码:

0 的原码是 00000000(8位表示)。

取反是 11111111,加 1 后为 00000000,因此补码仍然是 00000000。

2、最小负数的补码(溢出现象):

对于 n 位补码,最小负数的补码是:

-2^(n-1),例如,8 位下:

最小负数为 -128。

原码理论上是 10000000(8 位)。

取反后变成 01111111,加 1 后结果仍是 10000000,也就是说,补码和原码相同。

这是因为补码的数值范围是 [-128, 127],而 -128 无法正数化。

3、补码中的溢出检测:

当两个数相加时,如果正负号的运算结果不符,则发生溢出。例如:

127 + 1:

127 的补码是 01111111,1 的补码是 00000001。

加法结果:01111111 + 00000001 = 10000000,对应十进制 -128,发生溢出。

四、字符编码:从数字到语言

二进制最终要变成人类能看懂的字符,比如A、B或你。这就需要一套规则,规定数字和字符的对应关系。

ASCII

最早的字符编码,支持128个字符,包括英文字母和常见符号:

A→二进制01000001→十进制65

图片
图片

UTF-8

支持多语言字符,每个字符可以用1到4个字节表示:

你 → 二进制111001001011100010101001

GBK

咱们国专属的编码标准,优化了中文字符的表示:

你 → 二进制1100010011100011

五、从二进制到字符:终点的温暖

从最初的二进制0和1开始,我们一步步走到了字符。

二进制是最基础的数据表示方式。

十六进制是人类阅读二进制的翻译工具。

补码统一了正负数的表示,简化了计算。

字符编码连接了计算机和人类语言。

这段旅程看似冰冷,但却饱含了智慧与巧思。正是这些基础规则,让计算机从冷冰冰的机器,变成了如今为人类服务的智能伙伴。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档