【整理自用】格式輸出結果

牛客上有一些題目,只需要看輸出格式就可以了,不用想太複雜。
1. 不管是有符號數還是無符號數,printf控制輸出如果%d之類的,顯示在屏幕上的都是有符號數。所以有些題目不用想那麼複雜。
題目:下列C程序執行後c輸出結果爲( )(32位)(-1)

#include<stdio.h>
#include<stdlib.h>
void main()
{
  int a = -3;
  unsigned int b = 2;
  long c = a + b;
  printf("%ld\n",c);
}

有些人會想到,unsigned和signed遇見,有符號整數會被提升爲無符號整數。所以balabala想了一堆,最後還選擇一個錯誤答案,對,那就是我。這題不用看,控制格式輸出是輸出的%d,不管你怎麼提升,最後結果都是-1。
我在VS2012環境下測試過了,如果上述代碼改爲:

#include<stdio.h>
#include<stdlib.h>
void main()
{
  int a = -3;
  unsigned int b = 2;
  unsigned int c = a + b;//或者unsigned long int
  printf("%ld\n",c);
}

答案是一模一樣的。而如果把之前代碼改成:

#include<stdio.h>
#include<stdlib.h>
void main()
{
  int a = -3;
  unsigned int b = 2;
  long c = a + b;
  printf("%u\n",c);
}

那麼答案是0xfffffff。
但是接下來開始,如果是c++中std::cout<<輸出,那麼是這樣的:

#include<iostream>
void main()
{
    int a = -3;
    unsigned int b = 2;
    unsigned long c = a + b;
    std::cout<<c;
}

答案是0xfffffff。

#include<iostream>
void main()
{
    int a = -3;
    unsigned int b = 2;
     long c = a + b;
    std::cout<<c;
}

答案是-1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章