日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不用比较运算符及循环控制语句,判断int型的a、b两数的大小

發布時間:2024/7/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不用比较运算符及循环控制语句,判断int型的a、b两数的大小 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?看到這個題目的時候,我當時想到的,就是首先進行a-b,然后判斷最高的符號位是1還是0。。我想大家也都會想到這一點:

int max(int a, int b) {int max[2] = { a, b };return max[((a - b)&0x80000000) >> 31 ]; //與運算,將最高位的后面31位全部置為0,右移31位取出符號位 }

?????? 上面代碼在一般情況下都能得出正確的結果,但是當a是int型的最小值,而b是int型的最大值的時,相減就會有越界,并且符號位丟失了。其實不用那么極端的例子,因為兩個不同符號的數,相減很容易越界。所以我在這個代碼的基礎上,先判斷a和b的符號位,增加限制(符號相同,就減,這樣安全,沒有問題;符號相反的話,如果a是正數,b是負數,直接得出最大值或最小值),于是就有了下面的代碼:

#include "stdio.h" #include "stdlib.h"int Min(int a,int b) //先判斷符號位,符號相同的時候,兩個數相減 {return (((a >> 31 == 0) && (b >>31==1)) | (((a >> 31)^(b >> 31))==0)&&(((a-b)>>31)==0))? b:a;//printf("%s\n",(((a >> 31 == 0) && (b >>31==1)) | (((a >> 31)^(b >> 31))==0)&&(((a-b)>>31)==0))?"a>=b":"a<b"); }int main(void) {int a=0x80000000; //int類型的最小值int b=0x7fffffff; //int類型的最大值printf("%d\n",Min(a,b));system("pause");return 0; }



?

總結

以上是生活随笔為你收集整理的不用比较运算符及循环控制语句,判断int型的a、b两数的大小的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。