为什么这不输出'Junk'?

时间:2014-09-12 04:53:12

标签: c

所以我有这个联盟叫Junk。它包含一个int或char [4]数组......你可以告诉我我想要做什么。我将字母J,u,n和k的ASCII值放入我的int中,J进入第一个字节,u进入第二个字段,等等。我这样做是因为我的机器是小端,我希望包含J的字节是我的int中最左边的字节,应该与numc [0]对应。但我没有得到任何输出。出了什么问题?

#include <stdio.h>

union Junk {
  int num;
  char numc[4];
};

int
main(int argc, char ** argv){
  union Junk len;
  len.num = 74;         //J
  len.num &= 117 << 8;  //u
  len.num &= 110 << 16; //n
  len.num &= 107 << 24; //k
  putchar(len.numc[0]);
  putchar(len.numc[1]);
  putchar(len.numc[2]);
  putchar(len.numc[3]);
  putchar('\n');
  return 0;
}

2 个答案:

答案 0 :(得分:7)

您使用&=代替|=来设置位。由于&的操作数没有重叠位,因此您只需将len数设置为零。

答案 1 :(得分:2)

你需要OR字节,而不是AND它们。这是一个有效的版本:http://rextester.com/MPS15691