簡體   English   中英

計算C中的整數溢出

[英]Calculating integer overflow in C

我正在嘗試為x解決以下方程式,以使if語句為true。 我嘗試使用線性同余方程,但是無法獲得正確的答案。

我使用的假設是整數溢出發生在2 ^ 63-1,並且x的類型為long

有人可以給我一個如何做的指示嗎?

long arg1 = 1234123412341234;
long arg2 = -3456345634563456;
if(x * arg1 == arg2) {
    //true
}

首先,請注意,有符號整數溢出是不確定的。 但是,定義了無符號整數溢出。 我不確定有多少會改變問題,但是我將假定無符號整數而不是有符號整數。

問題又是x × arg1 = arg2 為了使包裝明確的,我們有X×ARG1 ARG2≡(MOD 2 64)。 如果我們想要x ,我們就解決它; 特別地,我們有x arg1 -1 × arg2 (mod 2 64 )。

然后的問題是如何找到arg1 -1 碰巧的是,這被稱為模乘逆 ,當它存在時(當arg1是2 64時 ,它是素數),可以使用擴展的歐幾里得算法找到它。

暫無
暫無

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

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