一个int型的变量,它的值的高字节存储什么,低字节又存储什么,这个变量的地址是高地址还是地址呢?

mengxiangying504 2009-02-18 05:01:23
int main()
{
int a = 32;
int b = 258;
cout << &a << ' ' << &b << endl;
short *p = (short*) &b;
cout << *p << endl;
return 0;
}

为什么输出的还是258呢?b的值用16进制表示是00 01 00 10,那么每个字节分别是怎么存储的,这个变量的地址是高字节的地址,还是低字节的地址呢?谢谢
...全文
877 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rex.Y 2010-01-03
  • 打赏
  • 举报
回复
vc6是占4字节的,请你记住,一个int的变量是分4个字节存储的,栈的高地址(也就是底部)存低字节数据,
比如说int i=0x12345678,在存储的时候12先进栈,78最后进栈!!!!!
maenxiang 2009-02-18
  • 打赏
  • 举报
回复
short int long等长度是C/C++语音未定义范畴。没有必要讨论。

一般short是16位的
一般16位系统中int 16位,long 32位。
一般32位系统中int 32位,long 32位,long long 64位。
一般64位系统中int 32位,long 64位,long long 64位。
maenxiang 2009-02-18
  • 打赏
  • 举报
回复
字节序问题,和CPU和操作系统有关。和编译器无关。

大凡Unix操作系统多为高字节序(高为存储低字节)。大凡Intel CPU都是低字节序。两个一结合,就说不准了。
另外还有混合字节序,最恶心。

传输的网络字节序使用高字节序。
passionboy03 2009-02-18
  • 打赏
  • 举报
回复
2字节的了,呵呵
[Quote=引用 6 楼 insulted 的回复:]
引用 5 楼 ysuliu 的回复:
short 也还是4字节。。好像只有比较老的编译器short才是2字节。。

哪有!?最新的gcc都是2字节!
[/Quote]
passionboy03 2009-02-18
  • 打赏
  • 举报
回复
刚看清楚,你对b的地址进行强制转换没什么意义,在输出*P时,还是把b的值输出,跟你说的高位低位没什么直接关系……:(
[Quote=引用楼主 mengxiangying504 的帖子:]
int main()
{
int a = 32;
int b = 258;
cout < < &a < < ' ' < < &b < < endl;
short *p = (short*) &b;
cout < < *p < < endl;
return 0;
}

为什么输出的还是258呢?b的值用16进制表示是00 01 00 10,那么每个字节分别是怎么存储的,这个变量的地址是高字节的地址,还是低字节的地址呢?谢谢
[/Quote]
insulted 2009-02-18
  • 打赏
  • 举报
回复

#include <iostream>
#include <bitset>

using namespace std;

int main()
{
int a = 2147483647;
int b = 32767;
cout << &a << ' ' << &b << endl;
short p = *(short*) &b;
cout << p << endl;

unsigned long nMem;// 临时变量,用于存储数的内存数据
// 将内存按位复制到临时变中,以便取用,此时的nMem并不等于b了,它是按位复制的。
nMem = *(unsigned long*)&b;
cout<<nMem<<endl; //一般得到一个很大的整数.

bitset<32>mybit(nMem);//妙在此处,这里的输出就是32位二进制的内存表示了.终于完全直观地看到了.
cout<<mybit<<endl;

cout<< sizeof(short) <<endl;
system("pause");
return 0;
}

lz可以运行上面的code,来看看一个int型的变量,它的值的高低字节分别是如何存储的,呵呵!
engleliang 2009-02-18
  • 打赏
  • 举报
回复
和编译器有关吧。
yuzl32 2009-02-18
  • 打赏
  • 举报
回复
short 2个字节存储258够了。
insulted 2009-02-18
  • 打赏
  • 举报
回复
vc6,vc7下都是两字节!
insulted 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ysuliu 的回复:]
short 也还是4字节。。好像只有比较老的编译器short才是2字节。。
[/Quote]
哪有!?最新的gcc都是2字节!
ysuliu 2009-02-18
  • 打赏
  • 举报
回复
short 也还是4字节。。好像只有比较老的编译器short才是2字节。。
insulted 2009-02-18
  • 打赏
  • 举报
回复

int a = 2147483647;
int b = 32767; // lz可以将此处改为32768或者更大的数,看看,想想,估计就明白了!
cout<< sizeof(short) <<endl;
cout << &a << ' ' << &b << endl;
short p = *(short*) &b;
cout << p << endl;

insulted 2009-02-18
  • 打赏
  • 举报
回复

int a = 2147483647;
int b = 32767;
cout<< sizeof(short) <<endl;
cout << &a << ' ' << &b << endl;
short p = *(short*) &b;
cout << p << endl;

一个short的长度是两个字节,即16位!
表示的有符号short型整数范围是32767 ~ -32768.
楼主再好好想想,额呵呵!
genius_tong 2009-02-18
  • 打赏
  • 举报
回复
是不是与不同的系统有关?……
passionboy03 2009-02-18
  • 打赏
  • 举报
回复
什么编译环境?
[Quote=引用楼主 mengxiangying504 的帖子:]
int main()
{
int a = 32;
int b = 258;
cout < < &a < < ' ' < < &b < < endl;
short *p = (short*) &b;
cout < < *p < < endl;
return 0;
}

为什么输出的还是258呢?b的值用16进制表示是00 01 00 10,那么每个字节分别是怎么存储的,这个变量的地址是高字节的地址,还是低字节的地址呢?谢谢
[/Quote]

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧