深入理解计算机系统笔记之第二章(一)

信息的表示和处理(一)

  1. 大多数计算机使用8位的块(也就是一个字节byte),由此可以看到32位(4个字节)系统和64位(8个字节)系统的区别。32位系统在于cpu可以同时处理4个字节(32位)的数据,那么64位系统cpu可以同时处理8个字节(64位)的数据。
  2. 一个字节(byte)由8位组成,值域 00000000(2)~11111111(2) == 0(10)~255(10) == 00(16)~FF(16)。正是因为十进制与位模式的互相转化很麻烦,而二进制的四位可表示为十六进制的一位,所以用采用十六进制来转换二进制。
十六进制0123456789ABCDEF
二进制0000000100100011010001010110011110001001101010111100110111101111

举例:0x173A4C(16) => 0001 0111 0011 1010 0100 1100(2)

​ 1 7 3 A 4 C

​ 11 1100 1010 1101 1011 0011(2) => 3 C A D B 3(16)

3.对于一个字长为w位的机器而言,虚拟地址的范围为0~2w-1,程序最多访问2w个字节

有符号无符号32位64位
charunsigned char11
shortunsigned short22
intunsigned44
longunsigned long48
int32_tuint32_t44
int64_tuint64_t88
char*48
float44
double88

4.假设变量x的类型为int, 位于地址0x100 ,16进制的值为0x01234567 (0被叫做高位字节,7被叫做低位字节)

地址范围0x100~0x103字节顺序机器不同类型:

0x1000x1010x1020x103
大端法01234567
小端法67452301

5.布尔代数

非运算1100 => 0011

与运算&: 0110 & 1100 => 0100

或预算|:0110 | 1100 => 1110

异或运算 ^ : 0110 ^ 1100 => 1010

&&(逻辑运算符) 与 &(位级运算符) 的区别:若对于第一个参数求值,就能确定表达式结果,那么逻辑运算符不会对第二个参数求值。

if(j2 & i++) 和 if(j2 && i++) 分别printf("%d\n",i) 结果可能不一样

6.移位运算

x0110001110010101
x<<40011000001010000
x>>4(逻辑右移)0000011000001001
x>>4(算术右移)0000011011111001

几乎所有编译器/机器:有符号->算术右移 无符号->必须逻辑右移

java:x>>k 算术右移 x>>>k 逻辑右移

7.64位系统下:

char-128127
unsigned char0255
short-3276832767
unsigned short065535
int-21474836482147483647
unsigned042亿

|TMin| = |TMax| + 1

UMaxw = 2w-1

TMinw = -2(w-1) TMaxw = 2(w-1)-1

9.强制类型转换的结果保持位置不变,只是改变解释这些位的方式。

如:T2U32(-1) = 4294967295 U2T32(4294967295) = -1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值