关于判断endianness

newprom 2009-03-19 01:42:40
网上看到利用
int x = 1;
return (*(char *)&x)
的返回值是否为1进行判断,不太理解,希望xdjm能给个详细的解释,&x的地址是32位吗?(char *)是取它的前八位吗?
...全文
52 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
liumingrong 2009-03-19
  • 打赏
  • 举报
回复
在32位机器上,指针都是32位的,它指向某个内存单元,但是它有类型信息,编译器根据这个类型信息来解释内存单元,
比如&x是int *的,
int占4个字节,那么编译器认为&x开始的4个字节存储了一个int值,怎么存储就分大小端的问题
&x-> c1
c2
c3
c4
(char *)&x 就是强制告诉编译器把&x这个指针看出char* 类型的,就是说这个指针指向一个char,只占用一个字节,
再*(char*)&x取出这个字节的值,显然这个值跟int x的存储方式有关,低端在前它就是1,高端在前就是0

65,211

社区成员

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

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