x*x>=0は必ず成立しますか?

544 ワード

https://mp.weixin.qq.com/s/GKyr0PuePPrYskHN6uUU6w
ほとんどのプログラミング言語では、46341<=int x<=65535の場合、xの二乗結果は負の数になります.
実は、これは確かに問題です.C言語の処理方法は、-int_です.minはint_に等しいmin、だから負数の反対数は必ずしも正数ではないよ、int_minは唯一の特例です.
オーバーフローの回避:
もう1つの一般的なオーバーフロー防止テクニックは、二分検索アルゴリズムで役立ちます.二分検索アルゴリズムを見てみましょう.
 
int binarySearch(int[] nums, int val) {
    int lo = 0, hi = nums.length - 1;
    while (lo 

 
int mid変数を計算する際,loとhi変数の数値が大きすぎて(lo+hi)オーバーフローが負の数を得ることを防止するために,直接加算を巧みに回避し,同様の結果を得たが,これは二分ルックアップアルゴリズムの詳細であり,学習に値する.