【C/C++】型別提升__C++

來源:互聯網
上載者:User
#include <iostream>#include <string.h>using namespace std;int main(){    char a = -1;    unsigned char b = 255;    printf("a = 0x%x  b = 0x%x \n", a, b);    system("pause");    return 0;}


運行結果如下:



解析:

之所以兩者在輸出結果上不一樣是因為%x是列印無符號整型(unsigned int)的16進位。因此在列印時,存在如下兩種隱式的類型轉換:

注1:

因為在編碼為補碼的情形下,型別提升有兩種情況: 1. 符號擴充:對於有符號數,擴充儲存位元的方法。在新的高位位元組使用當前最高有效位即符號位的值進行填充。(符號位都是用0表示“正”,用1表示“負”) 2. 零擴充:對於無符號數,擴充儲存位元的方法。在新的高位直接填0。 注2: -5對應正數5(原碼:00000101)→所有位取反(反碼:11111010)→加1(補碼:11111011)

1、char => unsigned int :a在電腦系統儲存為0xff,由於是符號擴充,所以對應於無符號整型數為:0xffffffff。

2、unsigned char => unsigned int :b在電腦系統儲存為0xff,由於是零擴充,所以對應於無符號整型數仍為:0xff。


參考博文:

C語言中的型別提升——基礎概念,但還有很多人搞不清

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.