C++中的一个简单的地址问题。

看钱能C++的书,我有个问题不明白。
他的书上有句话说,16位机器上,数组的起始地址是0x00000100。
对于这句话中的0x00000100,我觉得这台机器的地址应该有32位嘛,因为0x后面有8位16进制的数,4*8=32.可是,为什么书上说是16位的机器也是这样的地址呢?
就是我不太懂16位机器的地址表示形式和32位机器的地址表示形式的区别。
钱能的那边书只是假设一个地址是0x00000100.他当时是用16位机器。
可是,如果我们把00000100转化为2进制,不是有32位吗?他当时的16位机器是怎么得到这个地址的!

书上说的不一定完全正确,要有怀疑精神,尤其是计算机这东西。对于这个问题,“16位机器上,数组的起始地址是0x00000100”这句话本身我觉得就有些误导的成分。我推荐你多看国外的计算机书籍,因为国内的教材一般只讲结果,而不去告诉读者为什么(可能作者也不知道为什么),就像“16位机器上,数组的起始地址是0x00000100”只是个结果,但是为什么是这样?说实话,我也不知道,但是从这个事情我们似乎可以得到一些经验,就是这样的书最好少看。
计算机编程本身就是比较灵活的理科学科,学习的时候应该多思考,祝你好运!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-20
我没看过钱能的书,我的理解是这样的:
16位是指寄存器的位数,而不是指寻址位数,因为具体使用的时候,我们是用一个"基址寄存器偏移16位+寻址寄存器"表示一个地址。
由于基址寄存器16位,向左偏移16位,因此地址的位数为32位
第2个回答  2009-07-20
这里的地址和机器硬件无关,Windows是一个32位的操作系统,16位机器上能通过段选择子的方式来实现这个32位的地址,也就是段加段内偏移量
“可是,如果我们把00000100转化为2进制,不是有32位吗?他当时的16位机器是怎么得到这个地址的!”
当时的机器就是通过段选择子来实现的
第3个回答  2009-07-20
16为应该是是说CPU内部运算时的,而不是存储器的地址访问空间。本回答被提问者采纳
第4个回答  2009-07-20
没有人规定数组的起始地址是多少,建议你看看c++的iso标准。
相似回答
大家正在搜