[Share] 大きなオーバーフロー整数に対する PHP int 加算および減算関数 より良い方法がある場合は、お気軽にご相談ください。
PHP のオーバーフロー加算と減算演算 非常に大きな整数
オーバーフロー整数の加算と減算の演算関数を共有します。これを使用して、オーバーフロー整数の加算と減算を実行できます。残念な点は次のとおりです:
一代码太多;二只有加减运算,乘除取余都没有;
実は、SQL データベースを使用するより簡単な方法があります: SELECT n1+n2;
mysql> SELECT 11234123413241341234123412341234+1;+------------------------------------+| 11234123413241341234123412341234+1 |+------------------------------------+| 11234123413241341234123412341235 |+------------------------------------+1 row in set (0.00 sec)mysql> SELECT 11234123413241341234123412341234*12341234123;+----------------------------------------------+| 11234123413241341234123412341234*12341234123 |+----------------------------------------------+| 138642947209487270472850788378836360727782 |+----------------------------------------------+1 row in set (0.00 sec)
もっと良い方法があれば、お気軽に返信またはメッセージを送ってください。私。議論することを歓迎します。
/* big int operate [by fuzb 20130826] */function bigintO($num1,$op,$num2){ $arr = array(); $endop = ''; $num1o = $num1; $num2o = $num2; if($num1 < 0) { $c1 = -1; $num1 = preg_replace('/^(-)/','',$num1); } else { $c1 = 1; } if($num2 < 0) { $c2 = -1; $num2 = preg_replace('/^(-)/','',$num2); } else { $c2 = 1; } $len1 = strlen($num1); $len2 = strlen($num2); $len = max(strlen($num1),strlen($num2)); if($len1 < $len) $num1 = str_pad('0',$len - $len1).$num1; if($len2 < $len) $num2 = str_pad('0',$len - $len2).$num2; if($op == '+') { if($c1 == $c2) { $endop = $c1 > 0 ? '':'-'; } else { $endop = abs($num1o) > abs($num2o) ? $c1:$c2; $endop = $endop > 0 ? '':'-'; } $cc = $endop == '-' ? -1:1; for($i=0; $i< $len; $i++) { $n1 = intval($num1{$i}); $n2 = intval($num2{$i}); $n = $n1*$c1+$n2*$c2; $arr[$i] = $n*$cc; } } else if($op == '-') { if($c1 < 0) { $endop = $c2 > 0 ? '-':(abs($num1o) > abs($num2o) ? '-':''); } else { $endop = $c2 > 0 ? (abs($num1o) > abs($num2o) ? '':'-'):''; } $cc = $endop == '-' ? -1:1; for($i=0;$i < $len;$i++) { $n1 = intval($num1{$i}); $n2 = intval($num2{$i}); $n = $n1*$c1-$n2*$c2; $arr[$i] = $n*$cc; } } $len = count($arr); $arr2 = array(); for($i=0;$i< $len;$i++) { if($arr[$i] < 0) { $n = $arr[$i] + 10; $arr2[$i] = $n; $j = $i-1; while(true) { if($arr2[$j] == 0) { $arr2[$j] = 9; $j--; } else { $arr2[$j]--; break; } } } else if($arr[$i] > 9) { $n = $arr[$i] - 10; $arr2[$i] = $n; $j = $i-1; while(true) { if($arr2[$j] == 9) { $arr2[$j] = 0; $j--; } else { $arr2[$j]++; break; } } } else { $arr2[$i] = $arr[$i]; } } $value = $endop.preg_replace('/^(0{1,})/','',implode($arr2)); return strlen($value) > 0 ? $value : '0';}
テスト:
$a = '-12345678901234567890123456789';$b = '1';$c = bigintO($a,'+',$b);var_dump($a); var_dump($b); var_dump($c);exit();/*输出:string '-12345678901234567890123456789' (length=30)string '1' (length=1)string '-12345678901234567890123456788' (length=30)*/
ディスカッションへの返信 (解決策)
php は 2 つの高精度数学演算関数ライブラリ BC と GMP を提供しています
bcadd ? Add two arbitrary precision numbersbccomp ? Compare two arbitrary precision numbersbcdiv ? Divide two arbitrary precision numbersbcmod ? Get modulus of an arbitrary precision numberbcmul ? Multiply two arbitrary precision numberbcpow ? Raise an arbitrary precision number to anotherbcpowmod ? Raise an arbitrary precision number to another, reduced by a specified modulusbcscale ? Set default scale parameter for all bc math functionsbcsqrt ? Get the square root of an arbitrary precision numberbcsub ? Subtract one arbitrary precision number from another
gmp_abs ? Absolute valuegmp_add ? Add numbersgmp_and ? Bitwise ANDgmp_clrbit ? Clear bitgmp_cmp ? Compare numbersgmp_com ? Calculates one's complementgmp_div_q ? Divide numbersgmp_div_qr ? Divide numbers and get quotient and remaindergmp_div_r ? Remainder of the division of numbersgmp_div ? 别名 gmp_div_qgmp_divexact ? Exact division of numbersgmp_fact ? Factorialgmp_gcd ? Calculate GCDgmp_gcdext ? Calculate GCD and multipliersgmp_hamdist ? Hamming distancegmp_init ? Create GMP numbergmp_intval ? Convert GMP number to integergmp_invert ? Inverse by modulogmp_jacobi ? Jacobi symbolgmp_legendre ? Legendre symbolgmp_mod ? Modulo operationgmp_mul ? Multiply numbersgmp_neg ? Negate numbergmp_nextprime ? Find next prime numbergmp_or ? Bitwise ORgmp_perfect_square ? Perfect square checkgmp_popcount ? Population countgmp_pow ? Raise number into powergmp_powm ? Raise number into power with modulogmp_prob_prime ? Check if number is "probably prime"gmp_random ? Random numbergmp_scan0 ? Scan for 0gmp_scan1 ? Scan for 1gmp_setbit ? Set bitgmp_sign ? Sign of numbergmp_sqrt ? Calculate square rootgmp_sqrtrem ? Square root with remaindergmp_strval ? Convert GMP number to stringgmp_sub ? Subtract numbersgmp_testbit ? Tests if a bit is setgmp_xor ? Bitwise XOR

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
