C/C++中數的轉換

來源:互聯網
上載者:User

問題: d=1,-d==?

我們看看答案會是什麼樣的:

-----------------------------

下面的代碼的 輸出是什嗎?

int main() {

 char  dt = '\1';

long tdt;

tdt = -dt;

 printf("%ld\n", tdt);

}

我的第一反應是這個輸出應該是”-1“。 我想你也是這樣認為的。然而如果在64位系統上輸出是什麼 呢?我期望也是”-1“。 我們看看是這樣的嗎。

讓我們測試一下。

#xlc -q64 a.c  - qlanglvl=extended

#./a.out

4294967295

!! 這裡的輸出是“4294967295” 而不是“-1”,怎麼會這 樣呢?

別急別急,可能是我們漏了什嗎?  

在回答之前上面問題之前,我們看看下面程式碼片段:

"char  dt = '\1'; -dt;"

對於這個程式碼片段,我們確認一下dt變數是有符號還是沒有符號的?C

我們看看C語言標準怎麼說的:

The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.

也就是說標準沒有對char類型變數的符號做要求。我們在看看XL 編譯器的文檔 http://publib.boulder.ibm.com/infocenter/comphelp/v111v131/topic/com.ibm.xlc111.aix.doc/language _ref/ch.html

裡面說:

By default, char behaves like an unsigned char. To change this default, you can use the -qchars option or the #pragma chars directive. See -qchars for more information.

看來XL編譯器中,char預設是無符號的。我們可以用-qchars來改變這個預設行為。我們來測 試一下:

#xlc -q64 a.c  -qlanglvl=extended -qchar=signed

#./a.out

-1

太好了,原來如 此。我們好像明白了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.