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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

int的范围问题

發(fā)布時間:2023/12/4 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 int的范围问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

32位的int 的范圍為 -2^31 ~ 2^31-1。以下討論的均是32位的有符號整數,最高位為符號位。

int main(){
    int s1 = 0x80000000;
    int s2 = 0x7fffffff;
    int s3 = 0xffffffff;
    cout << "int最小值" << s1 << endl;
    cout << "int最大值" << s2 << endl;
    cout << "注意:" << s3<<endl;
    system("pause");
}

求源碼的補碼為 :

(1)正數的補碼和原碼相同

(2)負數的補碼=保持最高的符號位不變,其余位取反+1

但是

int s1=0x 8000 0000和 int s1=8這種方式有所區(qū)別:

計算機中存的是補碼:

所以對于

int s1=8 這種方式,首先求8的補碼存儲到計算機中,然后輸出的時候再還原回來。

然而對于

in s1= 0x ffff ffff 計算機中直接存的就是 0x ffff ffff 并不需要求 0x ffff ffff的補碼,0x fffff ffff是以補碼的形式直接存儲到計算機中的。

因此對于

int s1= 0x ffff ffff,計算機中存儲的是 0x ffff ffff ,輸出的時候,需要將其還原回來

注意計算機存儲的是0x ffff ffff是以補碼的形式存儲的,因此輸出的是必須再還原回來:

0x ffff ffff的補碼是 0x 8000 0001 ,最高位是符號位,因此輸出的是-1

int的最小值在計算機中存儲的為何存儲的是0x 8000 0000 呢?(注意最高位的符號位不參與運算,相當于標志位)

因為 輸出的時候 對 0x 8000 0000 取補碼,注意最高位是符號位,不參與運算, 因此對于剩下的31位, 0x 000 0000 取反加1后得到的是 0x 8000 0000

和最高位的符號位,加起來是 0x 1 8000 0000 溢出了,截取1位得到的是 0x 8000 0000 是-0 但是 已經有0的存儲方式了,是0x 0000 0000不需要有-0這種的存儲方式,因此雖然截取掉了溢出的位,但是實際計算了最高位,這里是計算機為了表示更小的數做的特殊處理,因此實際上這里 表示的 是 0x 1 8000 0000而不是 0x 8000 0000,那 0x 1 8000 0000的最高位是 1表示負數,0x 8000 0000 的值是 2^31,合起來表示的就是 -2^31.

總結

以上是生活随笔為你收集整理的int的范围问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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