哪个高手帮我解决一下

苦行者111 2008-11-22 08:20:07
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
typedef struct
{
int a:2;
int b:2;
int c:1;
}test;

test t;
t.a = 1;
t.b = 3;
t.c = 1;

printf("%d\n",t.a);
printf("%d\n",t.b);
printf("%d\n",t.c);
system("PAUSE");
return 0;
}


这个程序为什么得到的结果是 1 -1 -1 呢? 帮我分析一下程序嘛!
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
waizqfor 2008-11-23
  • 打赏
  • 举报
回复
不明白位域 很神奇啊 学习了
waizqfor 2008-11-23
  • 打赏
  • 举报
回复
不明白位域 很神奇啊 学习了
qq675927952 2008-11-23
  • 打赏
  • 举报
回复
up 同时学习了一下
deerwin1986 2008-11-22
  • 打赏
  • 举报
回复
呵呵 还是少用位域吧 BUG很多的
除非底层实现时可以小用下...
bgcelite 2008-11-22
  • 打赏
  • 举报
回复
回答的有理
freshairfly 2008-11-22
  • 打赏
  • 举报
回复
因为a占了2位,给它赋值1,它在内存里就是 01 (二进制),也就是1
b同样占了2位,赋值3的话,它在内存里应该是 11 (二进制),如果当初有符号的数字来看(最高位就是符号位),就是-1
c占了1位,赋值1,它在内存里是 1 (二进制),当初有符号数来看,也是 -1

因为printf("%d\n",t.a); 会把t.a当做有符号整数看待(这里应该有个隐式类型转换),所以。。。
风车呼噜噜 2008-11-22
  • 打赏
  • 举报
回复
如果1楼说的正确,用%u格式输出验证一下就可以了。

69,373

社区成员

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

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