VC 编译器设置 位域问题

hui85201 2008-04-19 01:09:41
struct MYFLOAT
{
unsigned long ulMantissa : 23; // 尾数,23位
char cExponent : 8; // 指数,8位
bool bSign : 1; // 符号,表示正负,1位
};
int main(int argc, char* argv[])
{
printf("%d\n",sizeof(MYFLOAT));
return 0;
}



怎么才能在VC6.0下让 输出结果是4?

请高手指教。

...全文
134 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
不会,帮顶
hui85201 2008-04-19
  • 打赏
  • 举报
回复
我试了你的结构定义,确实是这样,可是为什么呢?能不能告诉我?谢谢。



[Quote=引用 1 楼 zmlovelx 的回复:]
C/C++ code
struct MYFLOAT
{
unsigned int ulMantissa : 23; // 尾数,23位
unsigned int cExponent : 8; // 指数,8位
unsigned int bSign : 1; // 符号,表示正负,1位
};
int main(int argc, char* argv[])
{
printf("%d\n",sizeof(MYFLOAT));
return 0;
}





4
请按任意键继续. . .
[/Quote]
hui85201 2008-04-19
  • 打赏
  • 举报
回复
所以说1楼是正确的。但是我不知为什么,请告诉我,可以不。谢谢。
hui85201 2008-04-19
  • 打赏
  • 举报
回复
我试了,那样不可以,因为括号里面的4表示的是4个字节,不是4个bit

我把结构定义有这个样子就可以了

struct MYFLOAT
{
unsigned int ulMantissa : 26; // 尾数,23位
unsigned int cExponent : 8; // 指数,8位
unsigned int bSign : 1; // 符号,表示正负,1位
};
Leejun527 2008-04-19
  • 打赏
  • 举报
回复
我在vc6.0下得到是8
hui85201 2008-04-19
  • 打赏
  • 举报
回复
好的,我试试,谢谢先。
lockhall 2008-04-19
  • 打赏
  • 举报
回复
那就在开始处加:

#pragram pack(4)
hui85201 2008-04-19
  • 打赏
  • 举报
回复
在VC6.0下的结果是6啊
lockhall 2008-04-19
  • 打赏
  • 举报
回复
你结果得到是多少?
lockhall 2008-04-19
  • 打赏
  • 举报
回复
对齐啊.

23 + 8 + 1 = 32

正好4个字节啊.
帅得不敢出门 2008-04-19
  • 打赏
  • 举报
回复

struct MYFLOAT
{
unsigned int ulMantissa : 23; // 尾数,23位
unsigned int cExponent : 8; // 指数,8位
unsigned int bSign : 1; // 符号,表示正负,1位
};
int main(int argc, char* argv[])
{
printf("%d\n",sizeof(MYFLOAT));
return 0;
}



4
请按任意键继续. . .

69,371

社区成员

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

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