簡體   English   中英

是否在C中移位了帶符號的短未定義行為的有符號位?

[英]Is shifting the signed bit of a signed short undefined behaviour in C?

我聽說轉換成整數的有符號位,即

int test = INT_MAX;
test = (test<<1) + 1;

由於測試大於INT_MAX,因此是未定義的行為。 但是在簽名的短變量中會遇到這種行為,即

short test1 = SHRT_MAX;
test1 = (test1<<1) + 1;

目前我沒有遇到任何相關文件。

編輯:我知道未定義的行為將導致整數的情況,但不是短的。

當在大多數類型的表達式中使用小整數類型時,它將被提升為 int (如果int可以適合原始類型的所有值),然后在int上執行表達式。

這給了兩個可能性:

  1. intshort大小相同的平台上,移位將是未定義的行為,因為它會轉移到int的符號位。 (更准確地說,原因是結果不能表示為int )。 C11 6.5.7p4
  2. int具有更多位而不是short的平台上,移位本身將成功(盡管如果移位超過1,它可能是未定義的)。 但是,當您將結果分配回short變量時,該值將無法表示為short 將分配的實際值是實現定義的。 C11 6.3.1.3p3

暫無
暫無

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

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