[英]If we add one to the largest re-presentable integer, is the result negative?
該程序要求C
實現回答一個簡單的問題:
如果我們檢查最大的可重現整數INT_MAX <0並打印它。
printf ("%d\n", (INT_MAX) < 0);
所以,顯示輸出0
。 因為條件變為false而關系運算符返回0
。
但是,如果我們將 1
添加到最大可重現的整數並檢查條件,請參閱以下程序。
#include <limits.h>
#include <stdio.h>
int main (void)
{
printf ("%d\n", (INT_MAX+1) < 0);
return 0;
}
並顯示輸出 1
。
為什么條件不會變錯 ?
另外,如果我們將一個加到最大的可重現整數,那么結果是否定的?
如果我們將一個加到最大的可重現整數,那么結果是否定的?
否。有符號整數溢出是未定義的行為 。 您可能會觀察到它在2的補碼表示中包裹起來。 但這只是實現特定的行為,C標准絕對沒有任何保證。
INT_MAX
是有符號值, INT_MAX + 1
導致有符號整數溢出,從而調用未定義的行為 。
包含UB的(ny)程序的輸出( 如果有的話 )無法以任何方式證明。
INT_MAX + 1
的行為未定義,因為您將溢出signed
類型。
該程序可以輸出任何東西,或者編譯器可以吃你的貓。
(出於興趣,這就是為什么你會在2的補碼系統中看到-INT_MAX - 1
作為INT_MIN
的定義。)
INT_MAX = 0x7fffffff
INT_MAX + 1 = 0x80000000 = -2147483648 < 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.