簡體   English   中英

如果我們將一個加到最大的可重現整數,那么結果是否定的?

[英]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.

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