刚学习这本书没多久,感觉里面讲的东西挺多的,前后的关联性比较强。学着后面的还需要看看前的才可以更好的理解。
2.1信息存储
无符号(unsigned) 编码是基于传统的二进制表示法的,表示大于或者等于零的数字。
二进制补码(two's-complement)编码是表示有符号整数的最常见的方式,
有符号整数就是为正或者为负的数字。
浮点数(floating-point) 编码是表示实数的科学记数法的以二为基数的版本。计算机用这些不同的表示方法实现算术运算,例如加法和乘法,类似于相应的整数和实数运算。
计算机的表示法用有限的位数来对一个数字编码,因此,当结果太大以至不能表示时,某些运算就会溢出(overflow)。 这会导致某些令人吃惊的后果。例如,在大多数今天的计算机上,计算表达式200*300*400*500会得出-884901 888。这违背了整数运算的属性一计算-组正数的乘积产生了一个为负的结果。
大多数计算机使用8位的块,或叫做字节(byte), 来作为最小的可寻址的存储器单位,而不是
访问存储器中单独的位。机器级程序将存储器视为-一个非常大的字节数组,称为虚拟存储器(virtualmemory)。存储器的每个字节都由-一个惟-的数字来标识,称为它的地址(address),所有可能地址的集合就称为虚拟地址空间( virtual address space)。正如它的名字表明的,这个虚拟地址空间只是一个展现给机器级程序的概念性映像(image)。实际的实现(见第10章)使用的是随机访问存储器RAM、磁盘存储、特殊硬件和操作系统软件的结合,来为程序提供-一个看上去统一的字节数组。
大端法小端法
加一个12345的二进制转化与16进制转换
12345的二进制表示是:
11000000111001
转换步骤:
1. 12345 ÷ 2 = 6172...1
2. 6172 ÷ 2 = 3086...0
3. 3086 ÷ 2 = 1543...0
4. 1543 ÷ 2 = 771....1
5. 771 ÷ 2 = 385....1
6. 385 ÷ 2 = 192....1
7. 192 ÷ 2 = 96.....0
8. 96 ÷ 2 = 48.....0
9. 48 ÷ 2 = 24.....0
10. 24 ÷ 2 = 12.....0
11. 12 ÷ 2 = 6.......0
12. 6 ÷ 2 = 3.......0
13. 3 ÷ 2 = 1.......1
14. 1 ÷ 2 = 0.......1
所以12345的二进制表示是11000000111001。12345的十六进制表示是:
3039
转换步骤:
1. 12345 分解成12345 = (1 * 16^3) + (2 * 16^2) + (3 * 16^1) + (9 * 16^0)
2. 1 * 16^3 = 4096 (1 -> 十六进制数字1)
3. 2 * 16^2 = 512 (2 -> 十六进制数字2)
4. 3 * 16^1 = 48 (3 -> 十六进制数字3)
5. 9 * 16^0 = 9 (9 -> 十六进制数字9)
3. 将每个部分的十六进制数字组合:
4096 -> 1000
512 -> 0200
48 -> 0030
9 -> 0009
4. 合并每个部分的十六进制数字:
1000 0200 0030 0009
5. 去掉前导0,得到十六进制数:
3039
所以,12345的十六进制表示是3039。
像Sum关于12345 最低有效位 39,先输出为小段法的机器如Linux NT,但是像sum是最后输出30就是大端法的机器。
逻辑运算与位运算
位运算
像蓝色与绿色结果为 011 变为蓝绿色
逻辑运算
逻辑运算只有是非零的数就是 true 为0则为false;
总结:位运算有具体的值 而逻辑运算只有0和1的区别 。两者相同的情况是只有两个是二进制是一位。
整数的表示
32位和64位计算机的最大区别主要有:
1. 地址空间大小
32位计算机的寻址空间最大为4GB,64位计算机的寻址空间可以达到16EB。这意味着64位计算机可以支持更大的物理内存。
2. 寄存器和汇编指令长度
32位计算机的寄存器和汇编指令长度为32位,64位计算机为64位。这使得64位计算机可以在单次操作中处理更多的数据。
3. 操作数的数据类型
32位计算机的原生数据类型为32位,如int等。64位计算机增加了64位的long和指针类型,可以更高效地进行64位运算。
4. 兼容性
大多数64位CPU可以兼容运行32位代码。但是32位CPU无法运行64位代码。
5. 内存寻址
32位计算机最大可以寻址4GB内存空间,64位计算机可以寻址超过16EB的内存空间。
6. 安全性
64位计算机提供了更高的安全性,如增加寄存器长度来防止缓冲区溢出。
7. 性能
64位计算机的运算性能更强,可以更好支持数据密集型和计算密集型应用。
综上,64位计算机在地址空间、性能等各方面都优于32位计算机。这使得64位计算机可以支持更大和更复杂的应用。
12345的二进制表示是 0011 0000 0011 1001
补码为 1100 1111 1100 0111
12345的补码为 -12345的二进制形式
当1100 1111 1100 0111作为一个无符号数时数值为:-12345+32768+32768=53191
当53191的二机制加上12345的值减一时为1111 1111 1111 1111为 INT_MAX 就是 65535
不减一的话为 0; 变为0000 0000 0000 0000;说明一个数的源码加补码为0;