簡體   English   中英

C++11 標准是否保證零值有符號整數的一元減為零?

[英]Does the C++11 standard guarantee that the unary minus of a zero-valued signed integer is zero?

C++11 標准是否保證零值有符號整數的一元減為零?

例如:

int zero = 0;
int n = -zero;
int m = -0;
assert(memcmp(&n, &zero, sizeof(int)) == 0);
assert(memcmp(&m, &zero, sizeof(int)) == 0);

我知道-00在二進制的恭維表示中是相同的,但我想知道標准是否允許有符號整數零的否定對於其他表示形式為負零,例如一個人的恭維或有符號幅度。

我在 C++11 草案中所能找到的只是 §5.3.1,第 8 段:

一元運算符的操作數應具有算術或無作用域枚舉類型,結果是其操作數的否定 積分提升是在積分或枚舉操作數上執行的。 無符號量的負數是通過從 2^n 中減去其值來計算的,其中 n 是提升操作數中的位數。 結果的類型是提升操作數的類型。

我在草案中找不到否定的定義。

動機:我正在為一個庫(最終可能是開源的)編寫一個專門的整數解析器,我想知道我是否應該擔心"-0"被解釋為負零有符號整數的可能性在不常見的架構上。

注意:我已經知道負零浮點數。

該標准不要求整數的位模式,因為它旨在適用於盡可能廣泛的機器。 C++ 編譯器完全有可能使用補碼,其中零和負零是不同的。

暫無
暫無

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

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