[英]typecasting unsigned char and signed char to int in C
[英]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
這個位與在幾乎每台計算機使用的二進制補碼表示中對應於-50
的signed int
設置相同的位。
現在, printf
是一個具有可變數量參數的函數,它根據格式字符串進行解釋。 格式%d
用於signed int
而printf
無法知道相應的參數實際上是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.