CSAPP笔记——第二章计算机中信息的表示和处理

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥专栏: CSAPP笔记||书籍网课笔记 

🔥温馨提示:划到文末发现专栏彩蛋

🔥本篇概览:计算机中的信息存储与表示全过程、无符号整数、有符号整数的加减乘除运算等


Computer system A Programmer's Perspective
Chapter 2:Representing and Manipulating Information

目录

1. Information Storage I

Address

Word size

32-bit and 64-bit Program

 Addressing and Byte Ordering

Byte Print Program

Int&float type

2. Information Storage II

Representing Strings

Shift Operation in C

3.Integer Representations I(整数表示 I)

Unsigned Encoding

Signed Encoding

无符号数表示范围

有符号数表示范围

3.Integer Representations II(整数表示 II)

Conversions between Signed and Unsigned

Signed versus Unsigned in C

Expanding the Bit Representation of a Number

4. Integer Arithmetic(整数运算)

Detecting Overfow of Unsigned Addition

Unsigned Multiplication

Multiplying by Constants

乘法或者除法直接用移位操作以及加法或者减法来代替

5. Floating Point(浮点数)

Fractional Binary Numbers


1. Information Storage I

Address

信息在计算机中如何存储?

通常情况下,程序将内存视为一个非常大的数组,元素是字节,每个字节都有一个唯一的数字来表示,称之为地址。而这些所有地址空间的集合就称之为虚拟地址空间。     

Word size

字长决定了虚拟地址空间的最大值为多少。如字长为W,则虚拟地址空间字长的范围是0—2^W-1

计算机位数(机器字长)=字长=寄存器或运算器位数=CPU位数

计算机位数通常是指计算机中处理器一次可以处理的数据位数,也就是处理器的字长。它是衡量计算机性能的重要指标之一,常见的有 32 位和 64 位。 字长是指计算机一次能够处理的二进制位数,它通常等于处理器的位数。 寄存器或运算器位数是指计算机中寄存器或运算器能够处理的二进制位数,它通常等于处理器的位数。 CPU 位数是指 CPU 一次能够处理的二进制位数,它通常等于处理器的位数。 总之,这些术语通常都指的是计算机中处理器一次可以处理的数据位数,也就是处理器的字长。

字:表示被处理信息的单位,用来度量数据类型的宽度。因此字的位数并不是确定值,如x86机器将字定义为16位(汇编语言课程中),也就是两个字节,在32位arm机器中,字定义为32位(嵌入式课程中)。

操作系统位数:操作系统可寻址位数(小于等于CPU位数)。

32-bit and 64-bit Program

对于32位机器、64位机器,主要区别在于程序是如何编译的,而不是运行机器的类型。

而且只能向前兼容,不能像后兼容

 Addressing and Byte Ordering

例如下面的int类型数据0x01234567,在大端法与小端法中的存储样式。

大端开头

很多新的处理器支持双端法,可以配置两者之一,Android和IOS只支持小端法。

Byte Print Program

其中的show_bytes((byte_pointer)&x,sizeof(x));中的byte_pointer告诉指针应该把这个x看成指向一个字节的序列,而不是原来的数据类型

程序打印结果:

指针的值打印结果:

不同机器的操作系统分配的内存地址不同,所以指针的值是完全不同的,

如下:       

Int&float type

虽然整数于浮点相等,但是他们却有着完全不一致的编码模式

如下:

这里观察规律得知中间有一个十三位的位匹配,会在浮点数一章节详解

2. Information Storage II

Representing Strings

字符串表示

只要用ASCII码表示,就在任何平台上都是一样的,因此文本数据二进制数据具有更强的平台独立性

Shift Operation in C

注意算术右移补0或1是与最高位是为0还是1相关的

具体例子如下:

实际上,所有编译器对于有符号数使用的右移方式都是算术右移,由于无符号数使用的是逻辑右移。


3.Integer Representations I(整数表示 I)

首先我们来看看计算机是如何对无符号数进行编码的

Unsigned Encoding

位向量对无符号数的编码方式

图形化表示

Signed Encoding

看出来第一位是-2,所以也称为符号位。对于符号位注意这里应该利用权重来理解,利用下面的图解:

无符号数表示范围

有符号数表示范围

正数

负数

对于-1,要特别注意,不管是多少位都是全为1

3.Integer Representations II(整数表示 II)

Conversions between Signed and Unsigned

计算机系统中对有符号数与无符号数的转化规则是,位模式不变,但是解释这些位的方式发生了改变

两者之间的转化记住这个关系即可,有符号数前面为-2,只在最高位之差别

记住:相同位情况下,无符号数比有符号数大


Signed versus Unsigned in C

当有符号数与无符号数进行比较时,C语言中会将有符号数转化为无符号数。常常出现错误。

Expanding the Bit Representation of a Number

小转大

不同大小数据类型的转化

大转小

将高位剩出来的直接丢弃

 


4. Integer Arithmetic(整数运算)

unsigned addiction

上式发生溢出,故为0

过程分析

Detecting Overfow of Unsigned Addition

C语言中判断溢出与否代码

Unsigned Multiplication

截断运算——要想截断多少位就取多少的进制下的位数的幂

Multiplying by Constants

乘法或者除法直接用移位操作以及加法或者减法来代替

乘法如下

除法如下

先看将无符号数除以2^k的移位操作。其余与乘法类似,拆分即可

5. Floating Point(浮点数)

Fractional Binary Numbers

小数二进制表示法

浮点数在数学上具备一套与之前全然不同的标准规格化表示,比较复杂,跳过



💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏推荐

🌈🌈计算机科学入门系列                     关注走一波💕💕

🌈🌈CSAPP深入理解计算机原理        关注走一波💕💕

🌈🌈微服务项目之黑马头条                 关注走一波💕💕

🌈🌈redis深度项目之黑马点评            关注走一波💕💕

🌈🌈Java面试八股文系列专栏            关注走一波💕💕

🌈🌈算法leetcode+剑指offer              关注走一波💕💕


总栏

🌈🌈​​​​​​JAVA后端技术栈                          关注走一波💕💕  

🌈🌈JAVA面试八股文​​​​​​                          关注走一波💕💕  

🌈🌈JAVA项目(含源码深度剖析)    关注走一波💕💕  

🌈🌈计算机四件套                               关注走一波💕💕  

🌈🌈算法                                        ​​​​​​     ​关注走一波💕💕  

🌈🌈必知必会工具集                           关注走一波💕💕

🌈🌈书籍网课笔记汇总                       关注走一波💕💕  

🌈🌈考试复习资料                              关注走一波💕💕  

🌈🌈C/C++技术栈                              关注走一波💕💕  

🌈🌈GO技术栈                                   关注走一波💕💕  


分栏

🌈🌈JAVA后端技术栈

🌈🌈spring                                      关注走一波💕💕         ​

🌈🌈redis                                        关注走一波💕💕

🌈🌈MySQL                               ​​​     关注走一波💕💕 

🌈🌈mybatis                        ​​​​     ​​​​      关注走一波💕💕

🌈🌈mybatisplus                           关注走一波💕💕

🌈🌈MQ          ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        关注走一波💕💕

🌈🌈微服务                                     关注走一波💕💕

🌈🌈设计模式                                 关注走一波💕💕

🌈🌈分布式锁                                 关注走一波💕💕


🌈🌈JAVA八股文​​​​​​​​​​​​​​​​​​​​​JAVA面试八股文(redis、MySQL、框架、微服务、MQ、JVM、设计模式、并发编程、JAVA集合、常见技术场景)                                                          关注走一波💕💕    

                                                             


🌈🌈JAVA项目(含源码深度剖析)

🌈🌈黑马头条(微服务)             关注走一波💕💕

🌈🌈黑马点评(redis)               关注走一波💕💕


🌈🌈计算机四件套

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机网络                           关注走一波💕💕

🌈🌈数据结构与算法                    关注走一波💕💕


🌈🌈算法

🌈🌈leetcode                              关注走一波💕💕

🌈🌈剑指offer                             关注走一波💕💕


🌈🌈必知必会工具集                   关注走一波💕💕


🌈🌈书籍网课笔记汇总

🌈🌈CSAPP笔记                        关注走一波💕💕

🌈🌈计算机科学速成课               关注走一波💕💕

🌈🌈CS自学指南                        关注走一波💕💕

🌈🌈读书笔记与每日记录           关注走一波💕💕


🌈🌈考试复习资料​​​​​​​                      关注走一波💕💕


🌈🌈C/C++技术栈                      关注走一波💕💕                           


🌈🌈GO技术栈                          关注走一波💕💕                                                    


📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值