[英]Assigning an out-of-range integer to a signed char type
signed char a = 128;
假設一個字節是 8 位,這是未定義的嗎?
我所知道的是,將超出范圍的值分配給有符號類型是未定義的,但 Bjarne Stroustrup 在 C++ 編程語言中說,如果我將 integer 255 分配給 8 位字節機器上的 char 符號,其中 char 已簽名結果是-1。
signed char a = 128;
假設一個字節是 8 位,這是未定義的嗎?
我所知道的是,將超出范圍的值分配給有符號類型是未定義的,但是 Bjarne Stroustrup 在 C++ 編程語言中說,如果我將整數 255 分配給 8 位字節機器上的一個字符,其中一個字符是有符號的結果是-1。
默認情況下,在 C 和 C++ 中,上溢/下溢操作的結果是UNDEFINED 。 如果您溢出/下溢簽名變量類型是 obsecure 會發生什么,這意味着它可以被環繞(許多編譯器都假設它)或者可能轉儲核心或終止程序等。
但是編譯器開發人員通常不嚴格遵守這個定義,並且通常圍繞這些內置類型
這是 C++ 編程語言第 4 版 Bjarne Stroustrup(第 259 頁)中的一部分
void f()
{
int i = 1;
while (0 < i) ++i;
cout << "i has become negative!" << i << '\n';
}
//This will (eventually) try to increase i past the largest integer. What happens then is undefined, but
//typically the value ‘‘wraps around’’ to a negative number (on my machine −2147483648).
這是gnu所說的
此外,將超出范圍的值轉換為帶符號的 integer 類型時,可能會發生溢出。 在這里,標准實現必須定義會發生什么,但這可能包括引發異常。 實際上,在這種情況下,所有已知的實現都支持靜默環繞,因此您不必擔心其他可能性。 塊引用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.