%p打印地址出来0x后面有些是8位,有些是12位是什么原因
参考带你学C带你飞第22课printf(“%p”,&a);
打印a变量的地址,视频里输出是0x12345678(数字不一样,我就是想表达是8位),
我想了一下,16进制位,1个位置代表4个二进制位,8个就是32个二进制位,系统是32位的原因吧。
然后我自己的电脑,我也是用linux系统,版本是centos6.8,记得是64位的,装的挺久了,
同样打印输出,0x123456781234,后面跟着12位。我又想了一下,不对阿,64位不是应该有16个数字吗。
问题:地址长度和什么原因有关 0x1234
0x00001234
提问,上面两个输出有区别吗?有什么区别?
人造人 发表于 2020-2-4 18:19
0x1234
0x00001234
问我吗,我不知道锕,大哥请解答 a86116403 发表于 2020-2-4 19:40
问我吗,我不知道锕,大哥请解答
不管是十六进制还是十进制,在一个数的前面加0是不会改变这个数的大小的
例如
100
0000100
上面两个数都是相同的
因此
0x1234
0x00001234
这两个数的大小是一样的
0x123456789abc
0x000123456789abc
这两个数是一样的
或者写成128位的形式
0x0000000000000000000123456789abc
0x123456789abc
这个数有12个数字,可以肯定这个数不是一个32位的数,但是并不能说这个数是64位的,因为还有可能是128位的,或者256位的,不过就是前面多加几个0而已
你的系统是64位的,输出的这个地址是64位的,有16个数字组成
例如有一个64位的地址
0x0000000000000000 没错,这个64位的地址表示的就是地址0
0x0000000000000004 表示第4个内存单元
前面的那么多0可以省略
0x4
0x04
都表示第4个内存单元 人造人 发表于 2020-2-4 19:49
不管是十六进制还是十进制,在一个数的前面加0是不会改变这个数的大小的
例如
100
你的意思是前面是0的被省略掉了是吧,64位操作系统按理说是应该显示16位16进制数,只是这个变量存的地址刚好前4位是0所以省略掉了是吧。一个内存地址大小是一个字节这个我知道的。 人造人 发表于 2020-2-4 19:52
你的系统是64位的,输出的这个地址是64位的,有16个数字组成
例如有一个64位的地址
0x0000000000000000 ...
就是说比如一个变量存在0x0000123456789abc,打印出来的地址可能是0x123456789abc,是这个意思吧 a86116403 发表于 2020-2-4 23:23
你的意思是前面是0的被省略掉了是吧,64位操作系统按理说是应该显示16位16进制数,只是这个变量存的地址 ...
对,前面的4个0省略了
人造人 发表于 2020-2-5 00:09
对,前面的4个0省略了
大哥再请教一下啊,32位系统内存范围是0x0~0xffffffff,然后64位系统内存范围是0x0~0xffffffffffffffff,内存是向硬盘里去读内容,所以硬件都一样的情况下,64位比32位系统读取速度要快是吗 a86116403 发表于 2020-2-5 15:54
大哥再请教一下啊,32位系统内存范围是0x0~0xffffffff,然后64位系统内存范围是0x0~0xffffffffffffffff, ...
这可不一定,读取速度受好多因数的影响
首先就是你写的程序,如果你的程序是32位的,那速度肯定没有64位的程序快
如果外围硬件没有提供64位的数据通道,那就算是你的程序是64位的也快不了
有好多因数影响速度,不能一概而论
人造人 发表于 2020-2-5 16:10
这可不一定,读取速度受好多因数的影响
首先就是你写的程序,如果你的程序是32位的,那速度肯定没有64位 ...
谢谢
页:
[1]