一数制和编码
(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兆字节/秒
程序中数据类型的宽度
五数据存储时的字节排列
检测系统的字节顺序
大端/小端方式举例