簡體   English   中英

為什么輸出始終為-1?

[英]Why the output is always -1?

這是代碼:

char x=-1>>2;
printf("%d",x);

即使我做x = -N>>2也只會給出1

x = -1 => 11111111 
x= -1>>2 ==> 00111111 = 3F ??

即使我做int x = -1>>2 ,輸出也將是1

您能解釋一下該計算如何進行嗎?

負值的右移是實現定義的。

在您的情況下,您看到的右移行為是保留符號。

考慮char x = -38; 以下內容演示了保留符號時位移位的工作方式:

x       11011010
x >> 1  11101101
x >> 2  11110110
x >> 3  11111011
etc...

我相信,如果您使用

unsigned char x=-1>>2;

對於帶符號的數字(包括字符),向右移動不會附加零。 這稱為符號位擴展。 C使用2的補數形式存儲負數。 對於負數,此形式的符號位(MSB)為1,在操作期間將其填充。 使用無符號數字將解決此問題。

暫無
暫無

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

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