博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机系统的信息表示和处理
阅读量:4125 次
发布时间:2019-05-25

本文共 1775 字,大约阅读时间需要 5 分钟。

信息存储

计算机使用8位的块,或者字节(byte),作为最小的可寻址内存单位。机器级程序将内存视为非常大的字节数组,称为虚拟内存,内存的内一个字节都由唯一数字标识,称为它的地址,所有可能的地址集合称为虚拟地址空间

顾名思义,这个虚拟地址空间只是展现给机器程序的概念性映像,实际的实现是将动态随机访问存储器、闪存、磁盘存储器、操作系统软件结合起来,为程序提供一个看上去统一的字节数组。

十六进制表示法:

在这里插入图片描述

计算机都有一个字长,指明指针数据的标称大小(normal size),虚拟地址是以这样的一个字编码的,字长决定的参数就是虚拟地址空间的大小,对于字长为w位的机器而言,虚拟地址范围2~2^w-1,程序最多访问2^w个字节

C语言各种数据类型分配的字节数:

在这里插入图片描述

寻址

跨越多字节的程序对象,必须建立两个规则:

  • 这个对象的地址是什么
  • 在内存中如何排列这些字节

多字节对象几乎都被存储为连续的字节序列,对象地址为使用字节中最小的地址。例如,一个类型为int的变量x地址为0x100,也就是地址表达式 &x0x100, 那么(假设int为32位表示)x的4个字节将被存储在内存的0x1000x1010x1020x103位置

排列表示一个对象的字节有两个通用的规则,在内存中按照从最低有效字节到最高有效字节的顺序存储–最低有效字节在前的方式成为小端法,按照从最高有效字节到最低有效字节存储–最高有效字节在前的方式成为大端法

x类型为int,位与地址0x100,它的十六进制值为0x1234567

在这里插入图片描述

C字符串被编码为一个以NULL(值为0)字符结尾的字符数组,每个字符由某个标准编码表示,最常见ASCII码。使用ASCII码作为字符码的任何系统都将得到相同的结果,与字节顺序和字大小规则无关

C语言中数据取值范围

CPU能读懂的最小单位 —— 比特位,bit,b,即 0 1 两个数字;内存机构的最小寻址单位 —— 字节,Byte,B。如下图所示,为字节和比特之间的关系

在这里插入图片描述
计算机是用补码的形式来存放整数的值,其中正数的补码是该数的二进制形式,而负数的补码需要通过以下几步获得:

  • 先取得该数的绝对值的二进制形式,符号位置为1;
  • 符号位不变,将第1步的值按位取反(即将 0 都变为 1,1 都变为 0);
  • 符号位不变,最后将第2步的值加1
    在这里插入图片描述

为什么c语言中short的表示范围是-32768~32767

这得从二进制的原码说起,如果以最高位为符号位,二进制原码最大为0111111111111111=215-1=32767,最小为1111111111111111=-(215-1)=-32767。此时0有两种表示方法,即正0和负0:0000000000000000=1000000000000000=0,所以,二进制原码表示时,范围是-32767~-00~32767,因为有两个零的存在,所以不同的数值个数一共只有216-1个,比16位二进制能够提供的216个编码少1个

计算机中采用二进制补码存储数据,即正数编码不变,从00000000000000000111111111111111依旧表示0到32767,而负数需要把除符号位以后的部分取反加1,即-32767的补码为1000000000000001,到此,再来看原码的正0和负0:00000000000000001000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样变成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。

但是我们知道16位二进制数可以表示216个编码,而在补码中零的编码只有一个,也就是在补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转化为补码时变成1000000000000000,所以,人为规定1000000000000000这个补码编码为-32768。因此补码系统中,short范围为-32768~32767

实际上,二进制最小数确实是1111111111111111,只是二进制补码的最小值才是100000000000000,而补码的1111111111111111是二进制的-1

一个字节有符号取值范围:

在这里插入图片描述

【完】?

转载地址:http://tyhpi.baihongyu.com/

你可能感兴趣的文章
JAVA操作properties文件的代码实例
查看>>
IPS开发手记【一】
查看>>
Java通用字符处理类
查看>>
文件上传时生成“日期+随机数”式文件名前缀的Java代码
查看>>
Java代码检查工具Checkstyle常见输出结果
查看>>
北京十大情人分手圣地
查看>>
Android自动关机代码
查看>>
Android中启动其他Activity并返回结果
查看>>
2009年33所高校被暂停或被限制招生
查看>>
GlassFish 部署及应用入门
查看>>
iWatch报错: Authorization request cancled
查看>>
iWatch报错: Authorizationsession time out
查看>>
如何运行从网上下载的iWatch项目详细步骤.
查看>>
X-code7 beta error: warning: Is a directory
查看>>
Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
查看>>
X-code beta 开发iWatch项目,运行没有错误,但是某些操作一点就崩,而且找不错误的原因场景一
查看>>
Xcode 报错: Extra argument in call
查看>>
iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
查看>>
#import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found
查看>>
`MQTTClient (~> 0.2.6)` required by `Podfile`
查看>>