簡體   English   中英

如何通過移位將unsigned int轉換為負數?

[英]How it is possible to turn unsigned int to negative number with bit shift?

為什么執行此操作時我得到負數?

unsigned int a = 1 << 31;
printf("%d",a);

我已經在計算機上檢查了整數的大小,它是4個字節。 因此,我的整數由32位組成,向左移31位,直到最高位為止。 那意味着它應該是正數,但是我總是得到負數。

我得到的是--2147483648

我的期望:一些正數(可能是1073741824)

我在這里想念什么?

使用%u作為printf格式字符串。

含義:

printf("%u",a);

問題不在於您是否在轉移。 您只是沒有以相應的格式打印。

%d或%i用於打印int,因此當您嘗試打印未簽名的int時,它將轉換為帶符號的int。

請參閱此處: unsigned short int的格式說明符是什么?

https://www.le.ac.uk/users/rjm1/cotter/page_30.htm

除了您使用的錯誤格式說明符( %d而不是%u )之外,您還可能通過將1移入int操作數的符號位來調用未定義的行為, 如此答案所述
要解決此問題,請使用無符號文字:

unsigned int a = 1u << 31;
//                ^

暫無
暫無

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

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