这个问题挺让人又爱又恨啊,大家来看看

ylwdi 2009-11-23 11:56:45
#include "stdio.h"
#include "conio.h"
typedef unsigned char *byte_pointer;
void show_bytes (byte_pointer start,int len)
{int i;
for(i=0;i<len;i++)
printf("%0.2x\n",start[i]);
}
void main()
{int m=0X1234567;show_bytes((byte_pointer) &m,sizeof(int)); getch();
}
说int
1,是由编译器决定,在TC下main(){printf("%d",sizeof(int));}的结果确实为2,插,闷,那int m怎么把0X1234567全吞下去了,而且,运行结果还为67 45,实在是纳闷。。。
2,有部分人说是由机器决定的int的大小,
...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
stjay 2009-11-24
  • 打赏
  • 举报
回复
见惯不怪
TC是16位编译器
多字节基本类型存在大小端储存区别
baihacker 2009-11-24
  • 打赏
  • 举报
回复
如果忽略了环境,可能实现比较复杂,即使实现,性能也不好.
如果忽略了编译器...没编译器还谈啥?
baihacker 2009-11-24
  • 打赏
  • 举报
回复
...相当于给你多了东西,只要了自己能要的啊...
在这里是把0x1234567的低16位装到这个m里面了.

标准没有规定int大小,但int要至少达到short,long要至少达到int.

应该说是编译器及其环境决定了int大小.
环境提供支撑,编译器进行选择.
huashanqingzhu 2009-11-24
  • 打赏
  • 举报
回复
(1) int 的大小是由编译器决定的。
(2) 在80x86系列机中,数据的存贮是先存低字节再存高字节。
(3) 你说的“运行结果为67 45”是在什么环境下看到的?若看的是内存,那就对了。
因为输入0x1234567时,若TC的int型只有两个字节,那么将会使高位的0x123丢失,
仅将0x4567这16位存入先前定义好的两个字节(这里指int型变量(例如m)两个
字节的空间)。将这16位存入时,先存低字节再存高字节,而且是按地址由低到
高进行超作。所以,将0x4567的低字节0x67存入m的低字节,将0x4567的高字节
0x45存入m的高字节。于是,你在直接看内存单元时,会看到67 45,其中67是
低字节中的值,45是高字节中的值。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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