计算机系统的信息表示和处理

信息存储

计算机使用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

一个字节有符号取值范围:
在这里插入图片描述

【完】?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值