| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 966 人关注过本帖
标题:一个昨天没有解决的问题
取消只看楼主 加入收藏
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
一个昨天没有解决的问题
/*sizeof(int)=4*/


int main(int argc, char *argv[])
{
    struct packed_data
    {
        unsigned a : 16;
    }A,B;
    A.a=0XFFFF;
    B.a=A.a&0XAAAA;
    printf("%X\n",B.a);
    return 0;
}

运行结果是:FFFF                    



int main(int argc, char *argv[])
{
    struct packed_data
    {
        unsigned a : 16;
    }A,B;
    A.a=0XFFFF;
    B.a=0XAAAA;
    printf("%X\n",A.a&B.a);
    return 0;
}

运行结果是:AAAA
为什么第一个的结果不是:AAAA
搜索更多相关主题的帖子: return 
2009-10-28 18:22
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
无奈!大家把我的帖了都淹了
2009-10-28 18:29
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
规则我懂,就是觉的第一个的结果也是:AAAA
2009-10-28 19:09
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
pelles C
2009-10-28 20:42
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
我比较了一下:

int main(int argc, char *argv[])
{
   struct packed_date  
{  
unsigned a:8;  
}A,B;  
A.a=0XFF;  
B.a=A.a&0XAA;  
printf("%X\n",B.a);  
 return 0;
}

TC的结果为:AA     Pelles C的结果为:FF
2009-10-28 20:52
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
郁闷!应该是IDE的问题
2009-10-28 20:55
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
int main(int argc, char *argv[])
{
   struct packed_date
   {
   int a:8;
   }A,B;
   A.a=0XFF;
   B.a=A.a&0XAA;
   printf("%X\n",B.a);
   return 0;
   }

Tc的结果为:FFAA
我就纳闷了:0XAA的二进位:0000000010101010,
任凭A.a是多少,结果也不可能是FFAA,难道0XAA
为:1111111110101010,一定是我哪弄错了,哪位
大虾能帮帮我?
2009-10-28 21:43
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
这么看来,虽然本题中的0XAA没有定义,
但已默认为和它的运算项相同的类型,&时
补成16位!
2009-10-29 07:47
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
我总结了一下,请问在Pelles C中位运算的规律到底是什么?

int main(int argc, char *argv[])                     
{
   struct packed_date
   {
   unsigned a:4;
   }A,B;
   A.a=0X5;
   B.a=A.a & 0XA;
   printf("%X\n",B.a);
   return 0;
   }
 
TC的结果:0      Pelles C:5
 
int main(int argc, char *argv[])
{
   struct packed_date
   {
   unsigned a:4;
   }A,B;
   A.a=0XA;
   B.a=A.a & 0X5;
   printf("%X\n",B.a);
   return 0;
   }
 
TC:0      PC:A
 
int main(int argc, char *argv[])
{
   struct packed_date
   {
   unsigned a:4;
   }A,B;
   A.a=0XA;
   B.a=A.a & 0XF;
   printf("%X\n",B.a);
   return 0;
   }
 
TC:A    PC:A
 
int main(int argc, char *argv[])
{
   struct packed_date
   {
   unsigned a:4;
   }A,B;
   A.a=0XF;
   B.a=A.a & 0XA;
   printf("%X\n",B.a);
   return 0;
   }
 
TC:A   PC:F
 
int main(int argc, char *argv[])
{
   struct packed_date
   {
   unsigned a:4;
   }A,B;
   A.a=0XA;
   B.a=A.a & 0XF00;
   printf("%X\n",B.a);
   return 0;
   }
 
Tc:0    PC:0
 
 
我手边只有谭的书,上面只以TC为标准讲的
2009-10-29 11:49
快速回复:一个昨天没有解决的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012992 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved