
C++中的一个简单的地址问题。
看钱能C++的书,我有个问题不明白。他的书上有句话说,16位机器上,数组的起始地址是0x00000100。对于这句话中的0x00000100,我觉得这台机器的地址应该有3...
看钱能C++的书,我有个问题不明白。
他的书上有句话说,16位机器上,数组的起始地址是0x00000100。
对于这句话中的0x00000100,我觉得这台机器的地址应该有32位嘛,因为0x后面有8位16进制的数,4*8=32.可是,为什么书上说是16位的机器也是这样的地址呢?
就是我不太懂16位机器的地址表示形式和32位机器的地址表示形式的区别。
钱能的那边书只是假设一个地址是0x00000100.他当时是用16位机器。
可是,如果我们把00000100转化为2进制,不是有32位吗?他当时的16位机器是怎么得到这个地址的! 展开
他的书上有句话说,16位机器上,数组的起始地址是0x00000100。
对于这句话中的0x00000100,我觉得这台机器的地址应该有32位嘛,因为0x后面有8位16进制的数,4*8=32.可是,为什么书上说是16位的机器也是这样的地址呢?
就是我不太懂16位机器的地址表示形式和32位机器的地址表示形式的区别。
钱能的那边书只是假设一个地址是0x00000100.他当时是用16位机器。
可是,如果我们把00000100转化为2进制,不是有32位吗?他当时的16位机器是怎么得到这个地址的! 展开
6个回答
展开全部
书上说的不一定完全正确,要有怀疑精神,尤其是计算机这东西。对于这个问题,“16位机器上,数组的起始地址是0x00000100”这句话本身我觉得就有些误导的成分。我推荐你多看国外的计算机书籍,因为国内的教材一般只讲结果,而不去告诉读者为什么(可能作者也不知道为什么),就像“16位机器上,数组的起始地址是0x00000100”只是个结果,但是为什么是这样?说实话,我也不知道,但是从这个事情我们似乎可以得到一些经验,就是这样的书最好少看。
计算机编程本身就是比较灵活的理科学科,学习的时候应该多思考,祝你好运!
计算机编程本身就是比较灵活的理科学科,学习的时候应该多思考,祝你好运!

2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
展开全部
我没看过钱能的书,我的理解是这样的:
16位是指寄存器的位数,而不是指寻址位数,因为具体使用的时候,我们是用一个"基址寄存器偏移16位+寻址寄存器"表示一个地址。
由于基址寄存器16位,向左偏移16位,因此地址的位数为32位
16位是指寄存器的位数,而不是指寻址位数,因为具体使用的时候,我们是用一个"基址寄存器偏移16位+寻址寄存器"表示一个地址。
由于基址寄存器16位,向左偏移16位,因此地址的位数为32位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里的地址和机器硬件无关,Windows是一个32位的操作系统,16位机器上能通过段选择子的方式来实现这个32位的地址,也就是段加段内偏移量
“可是,如果我们把00000100转化为2进制,不是有32位吗?他当时的16位机器是怎么得到这个地址的!”
当时的机器就是通过段选择子来实现的
“可是,如果我们把00000100转化为2进制,不是有32位吗?他当时的16位机器是怎么得到这个地址的!”
当时的机器就是通过段选择子来实现的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
16为应该是是说CPU内部运算时的,而不是存储器的地址访问空间。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有人规定数组的起始地址是多少,建议你看看c++的iso标准。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询