C獲得int的最大值最小值,算術右移,邏輯右移

2021-06-14 16:47:21 字數 1227 閱讀 2851

以int為4位元組為例

unsigned int 0的二進位制表示為(後面解釋為什麼用unsigned int

00000000 00000000 00000000 00000000

那麼對其取反得:

11111111 11111111 11111111 11111111

因為int型第32位為符號位,所以要對上數右移一位,既得:

01111111 11111111 11111111 11111111

即2147483647

最小值即對上數再進行取反,得:

10000000 00000000 00000000 00000000 

即-2147483648

**如下:

int main(int argc, char *argv)

13年8月11日 

補充:關於為什麼要用unsigned int 0來進行操作:

這涉及到兩個概念,邏輯右移和算數右移

所謂邏輯右移就是,空缺的高位補零。

所謂算術右移就是,要保持符號位不變。

如果使用 unsigned  int 0來進行初始操作,則沒有符號位,右移操作是邏輯右移。

如果使用int 0來進行初始操作,則最高位是符號位,而有符號數的》操作是編譯器相關的。

即不同編譯器,有可能進行算術右移,也有可能進行邏輯右移。

另外,算術左移和邏輯左移是相同的,不要求保持符號位不變。

總結一下:

算術左移、邏輯左移、邏輯右移:空缺用0補。

算術右移:空缺用符號位補,即符

號位自身回溯,保證正為正,負為負。

綜上,由於》操作的編譯器相關導致的不確定性,《c和指標》建議,不要對有符號數進行》操作。

另外,用cout輸出十六進製制和八進位制,可用如下方式:

#include

cout<

引數只支援8 16 10,其他引數視為10,自己試的,有錯誤請提出。

最大值 最小值

求最大最小的時候有點小技巧,就是我們兩個兩個的比較,把大個跟當前最大比較,小的跟當前最小的比較,這樣就會節約一點比較時間,有原來的2 n到3 n 2。include include 得到最大最小值 int getmaxmin int ndata,int nlen,int pnmax,int pnmi...

int float double 最大值,最小值

中沒有double的最大最小值。如果輸出的比如 100lf輸出2.23432432,沒有達到100位,則最後2後面不一定都是0。原文見view plaincopy to clipboardprint?coder acboy date 2010 3 1 include include using na...

最大值最小值問題

看了不是很懂,先把別人的 放著,日後在研究。程式8 3 5.cpp 定義控制台應用程式的入口點。include stdafx.h 目標學會用猜數字 二分 的方法,換個角度來解決問題 include include includeconst int maxn 100000 int a maxn n,m...