【精通底层】全面了解计算机信息的表示和处理

举报
小明的混沌之路 发表于 2022/07/31 13:30:11 2022/07/31
【摘要】 前言:📫 作者简介:小明java问道之路,专注于研究计算机底层,就职于金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的设计和架构📫 🏆 Java 领域优质创作者、阿里云专家博主、华为云专家🏆🔥 如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦本文导读本章研究计算机上如何表示数字和其他形式数据的基本属性,计算机对这些数据执行操作的属性。一、计算机的编...


前言:📫 作者简介:小明java问道之路,专注于研究计算机底层,就职于金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的设计和架构📫 

🏆 Java 领域优质创作者、阿里云专家博主、华为云专家🏆

🔥 如果此文还不错的话,还请👍关注点赞收藏三连支持👍一下博主哦


本文导读

本章研究计算机上如何表示数字和其他形式数据的基本属性,计算机对这些数据执行操作的属性。

一、计算机的编码原理

计算机将信息编码为位(比特),通常组织成字节序列。计算机具有不同放入编码方式用来表示整数、实数和字符。不同计算机模型在编码数字和多字节数据中的字节顺序是使用不同方式(约定)。下图是整数加法只有中间正常,如果是无符号,如下图

二、计算机的进制(十六进制)

我们以C语言为例,以0x或者0X开头的是十六进制的值。字符‘A’~‘F’不区分大小写,也可以混合写。牢记A、C、F相对应的十进制值和二进制表示,可以很方便的转换。给定二进制去转换十六进制,首先从右往左分为4位一组,最左不满4位的就在前面用0补足。

当值x是2的非负整数n次幂时,也就是x=2n,其x的二进制表示就是1后面跟n个0。因为十六进制中数字0代表4个二进制0,所以可以将n写成i+4j(0<=i<=3)的形式,可以把x写成开头的十六进制数字为1(i=0)、2(i=1)、4(i=2)、8(i=3),后面跟随者j个十六进制的0。例如x=2048=211,所有有n=11=3+4*2,即二进制表示为1000 0000 0000得出其十六进制表示为0x800。

三、计算机的编码补码

大多机器对整数使用补码编码,对浮点数使用IEEE标准754编码。

在相同长度的无符号和有符号整数之间进行强制转换时,C语言遵循底层的位模式不变。

由于编码的长度有限,与传统整数和实数运算相比,计算机运算具有不同的属性。当超出表示范围时,有效长度能够引起数值溢出,当浮点数非常接近0.0,从而转换成0时也会下溢。C语言由于溢出x*x能够得到负数,但是也遵循位运算和算术运算,例如~x-1 等价于 -x。

浮点数表示通过将数字编码的数值为x*2^y的形式来近似地表示实数。

小结

CSAPP一书的第二章信息的表示和处理,主要研究计算机上如何表示数字和其他形式数据的基本属性,计算机对这些数据执行操作的属性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。