[英]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.