+ -
当前位置:首页 → 问答吧 → int i = 13赋值给另外一个int a, 结果a变成65549,这是什么原因,谢谢先。

int i = 13赋值给另外一个int a, 结果a变成65549,这是什么原因,谢谢先。

时间:2010-08-16

来源:互联网

本帖最后由 梅川内依酷 于 2010-08-16 11:52 编辑

是直接赋值。a = 13,打印%d出来也是65549

amr9 linux-2.6.14 arm-linux-gcc 32位


莫名其妙啊
  1. typedef struct EVENT_MAIN_FCP_t
  2. {
  3.     unsigned int DI_Switch;     
  4.     unsigned int DI_NO_NC;      
  5.     unsigned int VL_Switch;           
  6. }__attribute__((packed))EVENT_MAIN;


  7. int GuardEvent_Get(EVENT_MAIN *EventMain)
  8. {
  9.     unsigned int ret = 0;
  10.    

  11.     if (!EventMain )
  12.     {
  13.         return -1;
  14.     }

  15.     INI_FILE_INDEX guard_init = GUARD_INI;

  16.    //ret += Common_Readint(guard_init, "Guard:guard_di", &EventMain->DI_Switch);              
  17.            
  18.     EventMain->DI_Switch = 13; //-----------------------------------------这里直接赋值都错

  19.     printf(" guard_di:%d\t guard_vl:%d\n",EventMain->DI_Switch, EventMain->VL_Switch);

  20.     return ret;
  21. }

  22. int get_allinfor()
  23. {
  24.         ALLSETUPINFO_FCP_t guard_all_infor;
  25.     memset(&guard_all_infor, 0, sizeof(guard_all_infor));

  26.     ret += Event_Get(&(guard_all_infor.EventMain));
  27.    
  28. }
复制代码

作者: 梅川内依酷   发布时间: 2010-08-16

多了个2^16,诡异……

作者: daybreakcx   发布时间: 2010-08-16

确信是int? 没有被伪装?

感觉跟short 有关系~

作者: efolzl   发布时间: 2010-08-16

回复 daybreakcx


    试验结果表明 都是在65536的基础上加

作者: 梅川内依酷   发布时间: 2010-08-16

你的代码不会是只有这两句吧,把主要的贴出来吧……

作者: daybreakcx   发布时间: 2010-08-16

原因是代码写错了

作者: hellioncu   发布时间: 2010-08-16

本帖最后由 梅川内依酷 于 2010-08-16 11:46 编辑

回复 daybreakcx
  1. typedef struct EVENT_MAIN_FCP_t
  2. {
  3.     unsigned int DI_Switch;     
  4.     unsigned int DI_NO_NC;      
  5.     unsigned int VL_Switch;           
  6. }__attribute__((packed))EVENT_MAIN;


  7. int GuardEvent_Get(EVENT_MAIN *EventMain)
  8. {
  9.     unsigned int ret = 0;
  10.    

  11.     if (!EventMain )
  12.     {
  13.         return -1;
  14.     }

  15.     INI_FILE_INDEX guard_init = GUARD_INI;

  16.    //ret += Common_Readint(guard_init, "Guard:guard_di", &EventMain->DI_Switch);              
  17.            
  18.     EventMain->DI_Switch = 13; //-----------------------------------------这里直接赋值都错

  19.     printf(" guard_di:%d\t guard_vl:%d\n", EventMain->DI_Switch, EventMain->VL_Switch);

  20.     return ret;
  21. }

  22. int get_allinfor()
  23. {
  24.         ALLSETUPINFO_FCP_t guard_all_infor;
  25.     memset(&guard_all_infor, 0, sizeof(guard_all_infor));

  26.     ret += Event_Get(&(guard_all_infor.EventMain));
  27.    
  28. }
复制代码

作者: 梅川内依酷   发布时间: 2010-08-16

printf(" guard_di:%d\t guard_vl:%d\n", i, EventMain->DI_Switch, EventMain->VL_Switch);

两个 %d,后面3个参数

作者: hellioncu   发布时间: 2010-08-16

回复 hellioncu


    我之前还打印了一个i

作者: 梅川内依酷   发布时间: 2010-08-16

肯定有问题嘛

作者: rain_fish   发布时间: 2010-08-16



QUOTE:
肯定有问题嘛
rain_fish 发表于 2010-08-16 11:54




    兄弟 直接告诉我吧

作者: 梅川内依酷   发布时间: 2010-08-16

中间没有任何其他步骤直接赋值后打印,真的这样还是不对?

作者: daybreakcx   发布时间: 2010-08-16

13的二进制是 :                                  1101
65549的二进制是: 10000000000001101

作者: zhangsuozhu   发布时间: 2010-08-16

回复 daybreakcx


    没有其他步骤

作者: 梅川内依酷   发布时间: 2010-08-16

关注

作者: zylthinking   发布时间: 2010-08-16