无符号字符是以二进制打印时打印的答案

时间:2015-12-14 09:11:58

标签: c

目标是打印-ve或+ ve整数的二进制输出,当我们用signed声明变量时输出是正确的,但是当变量声明为unsigned时无法理解行为。

  int main() {
      unsigned char num = -1; /* unsigned int */
      int i = 0;
      /* Loop to print binary values */
      for (i = 0 ; i < 8; i++) {
        if(num & 128u)
        {
         printf("1 ");
        }
        else 
        {
         printf("0 ");
        }
        num= num<<1;
      }
      printf("\n");
      return 0;
    }
  

输出打印为&#34; 1 1 1 1 1 1 1 1&#34;

等于-1;但我已将unsigned int作为输入。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

当你做的时候

unsigned char num = -1; /* unsigned int */

num存储的是十进制的255(最大数字)。所以在每个循环中if(num & 128u)都令人满意,所以o / p就是....

  

/ *输出打印为&#34; 1 1 1 1 1 1 1 1&#34; * /

还有一些问题你说的是int,但是在程序中你已经char变量并在signed变量中存储unsigned数字,所以你会没有得到你期望的o / p。