计算系统基础-第二章数据的表示和存储-总结

                      一数制和编码

(1)“转换”的概念在数据表示中的反映

 

 

 

 

(2)信息的二进制编码

 

(3)数值数据的表示

 

(4)十进制(Decimal)计数制

 

 

(5)二进制(Binary)计数制

 

(6)R进位计数制

 

(7)十进制数与R进制数之间的转换

(8)十进制数与二进制数之间的转换

 

(9)十进制数与8进制数之间的转换

(10)定点数和浮点数

 

 

 

二c语言中的整数

(1)在计算机内部数值一律使用补码存储。正数的补码与原码一致,负数的补码是符号位为1,其余位是该负数的绝对值按位取反后加1得到。

 

-1和-2在内存是如何存储的呢?

负数在内存中就是以补码形式存在的.

十进制 原码 反码 补码

 

-1 10000 0001 1111 1110 1111 1111(-1的补码0xff)

 

-2 10000 0010 1111 1101 1111 1110(-2的补码0xfe)

 

有符号整数,二进制的最高位表示正负,不表示数值,最高位为0时表示正数,为1时表示负数

signed char 1B –128 到 127 (-2^7 - 2^7-1)

0 111 1111 0表示整数故最大值2^7 -1 2^7(1000 0000)

为什么是-128?

关键在于signed char或者说char数据类型不论有无符号,在C/C++语言中占用的内存的空间均为1B,也就是8bit,​是可以用1000 0000表示-128的,它是把最高位符号位丢弃了,截断后的-128的补码和原码一致,这里不知道大家有没有发现-0和这个-128的原码看起来的有点眼熟的意思。 没错,-0(1000 0000)和-128(1000 0000)原码相同,也就说1000 0000和-128丢弃最高位后余下的8位相同,所以-0也可以也可以用来表示-128.   这样子,截断后的-128和char型范围其他数 (-127~127)运算也不会影响结果,所以才敢这么表示-128. 

 

char a=-128; //原码(1 1000 0000)-->反码(1 1000 0000)在内存中以补码1 1000 0000 存储,但由于是char ,所以只存储 1000 0000,最高位丢弃

 

char a=-129; //原码(1 1000 0001)-->反码(1 0111 1111)在内存中以补码为1 0111 1111 只取后八位存储,即 0111 111 这个值刚好是127了,同理-130 截断后为126.....

printf("%d",a) ;会输入多少?结果为127(0111 1111)

 

 

unsigned char 1B 0 到 255 (0 - 2^8-1) -----> 0000 0000 -- 1111 1111(2^8 - 1) 2^8 (1 0000 0000)

 

0: 0000 0000 0000 0000 0000 0000

 

-0: 1 0000 0000 ->(取反) 1 1111 1111 ->(加1) 1 0000 0000

-1: 1 000 0001 ->(取反) 1 111 1110 ->(加1) 1111 1111

-2: 1 000 0010 ->(取反) 1 111 1101 ->(加1) 1111 1110

-3: 1 000 0011 ->(取反) 1 111 1100 ->(加1) 1111 1101

 

… …

 

-127 1 111 1111 ->(取反) 1 000 0000 ->(加1) 100 00001

-128 1 1000 0000 ->(取反) 1 0111 1111 ->(加1) 1000 0000

-129 1 1000 0001 ->(取反) 1 0111 1110 ->(加1) 0111 1111

 

 

三浮点数的编码表示

 

 

 

四数据宽度和存储容量的单位

(1)数据的基本宽度

比特(bit,位)是计算机中处理、存储、传输信息的最小单位

• 二进制信息最基本的计量单位是“字节”(Byte) –现代计算机中,存储器按字节编址–字节是最小可寻址单位 (addressable unit ) –如果以字节为一个排列单位,则LSB表示最低有效字节,MSB表示最高有效字节

• 除比特(位)和字节外,还经常使用“字”(word) 作为单位

–“字”和 “字长”的概念不同

IA-32中的“字”有多少位? 字长多少位呢?

DWORD :32位

QWORD:64位

 

 

“字”和 “字长”的概念不同

–“字长”指数据通路的宽度。

”字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度(这些部件的宽度都是一样的)

–“字”表示被处理信息的单位,用来度量数据类型的宽度

 

–字和字长的宽度可以一样,也可不同

例1:对于x86体系结构,不管字长多少,定义“字”的宽度都为16位,而从i386体系开始字长就是32位了。

例2:对于MIPS 32体系结构,其字和字长都是32位。

 

 

 

数据量的度量单位

• 存储二进制信息时的度量单位要比字节或字大得多

• 容量经常使用的单位有:

– “千字节”(KB),1KB=210字节=1024B

– “兆字节”(MB),1MB=220字节=1024KB

– “千兆字节”(GB),1GB=230字节=1024MB

– “兆兆字节”(TB),1TB=240字节=1024GB

• 通信中的带宽使用的单位有:

– “千比特/秒”(kb/s),1kbps=10^3b/s=1000 bps – “兆比特/秒”(Mb/s),1Mbps=10^6 b/s =1000 kbps – “千兆比特/秒”(Gb/s),1Gbps=10^9 b/s =1000 Mbps – “兆兆比特/秒”(Tb/s),1Tbps=10^12 b/s =1000 Gbps

如果把b换成B,则表示字节而不是比特(位)例如,10MBps表示 10兆字节/秒

 

程序中数据类型的宽度

 

 

五数据存储时的字节排列

 

 

检测系统的字节顺序

 

大端/小端方式举例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值