[英]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
上執行表達式。
這給了兩個可能性:
int
與short
大小相同的平台上,移位將是未定義的行為,因為它會轉移到int
的符號位。 (更准確地說,原因是結果不能表示為int
)。 見C11 6.5.7p4 。 int
具有更多位而不是short
的平台上,移位本身將成功(盡管如果移位超過1,它可能是未定義的)。 但是,當您將結果分配回short
變量時,該值將無法表示為short
。 將分配的實際值是實現定義的。 見C11 6.3.1.3p3 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.