无符号短无符号长分配

时间:2010-03-04 14:28:41

标签: c

从long到short分配时,LSB 2字节为0,其中MSB填充来自堆栈的func1()算法值的值。为什么会发生这种情况,为什么编译器试图将这些垃圾值变为MSB 2字节?

#include <stdio.h>

unsigned short func1(void); // NB: function prototype !

int main(void)

{

     unsigned long int L = 0;

     unsigned short K = 0;

     L = func1();

      printf("%lu", L); // prints junk values

      K = L; 

      printf("%u", K);  // prints 0

     return 0;
}

unsigned short func1(void)

{

      unsigned short i = 0;

      // Algorithm Logic!!!

      return i; // returns 0
}

2 个答案:

答案 0 :(得分:5)

unsigned long的说明符为luunsigned short的内容为hu。您通过不使用正确的说明符来调用UB。

答案 1 :(得分:0)

您的代码存在许多问题 - 这是一个应该正常运行的固定版本。

#include <stdio.h>

unsigned short func1(void); // NB: function prototype !

int main(void)
{
  unsigned long int L = 0;
  unsigned short K = 0;

  L = func1();
  printf("%lu", L);
  K = L; 
  printf("%u", K);

  return 0;
}

unsigned short func1(void)
{
   unsigned short i = 0;

   // Algorithm Logic!!!

   return i; // returns 0
}