簡體   English   中英

將帶符號的char轉換為C中的unsigned int

[英]Cast signed char to unsigned int in C

任何人都可以向我解釋為什么下面的代碼輸出-50即使它被轉換為unsigned int?

int main()
{
  signed char byte = -50;
  unsigned int n;

  n = (unsigned int) byte;

  printf("n: %d", n);
}

輸出:-50

演員是正確的,但你打印錯誤。 printf() %d用於int ,將其更改為:

printf("n: %u", n);

-50分配給unsigned int會導致整數回繞,並且包含unsigned int這個位與在幾乎每台計算機使用的二進制補碼表示中對應於-50signed int設置相同的位。

現在, printf是一個具有可變數量參數的函數,它根據格式字符串進行解釋。 格式%d用於signed intprintf無法知道相應的參數實際上是unsigned int (因為你告訴它)。 所以這些位被解釋為好像是signed int並且你得到-50

隨你的聲明:

printf("n: %d", n); 

你把它投射到“有符號十進制整數”

如果你試試

std::cout<<n<<std::endl;

你會看到你不會得到-50

即使是printf("n: %u", n); ,你不會得到50

請參閱鏈接int到unsigned int轉換

暫無
暫無

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

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