簡體   English   中英

為什么該程序的輸出意外?

[英]Why is this program's output unexpected?

以下代碼在eclipse中執行,在Ubuntu上運行並使用g ++編譯器進行編譯時,會提供意外的結果。

碼:

#include <iostream>
int main()
{
    unsigned int a=5555;
    std::cout << (unsigned int)(((char*)&a)[0]) <<  "\n";
    std::cout << (unsigned int)(((char*)&a)[1]) <<  "\n";
    std::cout << (unsigned int)(((char*)&a)[2]) <<  "\n";
    std::cout << (unsigned int)(((char*)&a)[3]) <<  "\n";

  return 0;
}

我試圖將變量a視為一個整數數組,每個整數一個字節大小。 當我執行程序時,這就是我的輸出:

輸出:

4294967219
21
0
0

題:

為什么第一個值顯示的太大(此處int的大小為32位或4個字節)。 因此,每個輸出值顯然都不應大於255,對嗎? 為什么最后三個值都為零? 還是為什么我得到錯誤的結果?

在運行相同編譯器的code :: blocks中測試時,我也得到了相同的結果。

這是因為char是帶符號的整數類型。

十進制5555是十六進制0x15b3

當將0xb3字節符號擴展為一個有signed int ,它變為0xffffffb3

解釋為unsigned int 0xffffffb3以十進制表示為4294967219。

這是由於符號擴展。 讓我們看看您的unsigned int a內存:

b3 15 00 00

當您將第一個字節從有signed char轉換為unsigned int ,從charint的轉換發生在從signedunsigned的轉換之前,因此,對符號位進行了擴展,結果是( 0xffffffb3 )您的第一行。

嘗試強制轉換為unsigned char *而不是char *

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM