最大值和最小值的操作處理

2021-06-20 21:47:24 字數 1399 閱讀 4688

在寫**的時候,尤其是數字計算的時候,我們會經常碰到計算邊界的問題,也就是說溢位的問題,比如說:最小的負數-1會出現什麼情況?最大的正整數+1會出現什麼情況?
先看看下面的**

package com.test;

public class test

public void printresult(string tag, operator op)

public operator getmaxinstance()

public operator getmininstance()

inte***ce operator

class maxvalue implements operator

@override

public int add(int a)

@override

public int minues(int a)

} class minimalvalue implements operator

@override

public int minues(int b)

@override

public int getvalue()

}}

執行上面的**結果是:

maxvalue: 2147483647

maxvalue+1: -2147483648

maxvalue-1: 2147483646

minivalue: -2147483648

minivalue+1: -2147483647

minivalue-1: 2147483647

對於上述操作,總結如下

下面用二進位制來解釋

最小值為 0x10000000====>10000000 00000000 00000000 00000000

最大值為0x7fffffff*****>01111111 11111111 11111111 11111111

最小值-1=01111111 11111111 11111111 11111111*****=》轉化為十進位制要按照two's complement的操作來弄,就過就是上面那樣

最大值+1=10000000 00000000 00000000 00000000*****=》轉化為十進位制要按照two's complement的操作來弄,就過就是上面那樣

接下來會討論float和double以及如何判斷溢位。

最大值 最小值

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

NYOJ 最大值和最小值

最大值和最小值 時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小明在上c語言課時老師布置了一道程式設計作業,要求是給你乙個數 數的長度小於100 讓你求出由該數的數字組成的最大值和最小值,由於小明程式設計學的不好但為了完成作業,想請你幫助他。輸入第一行輸入乙個數n 0輸出 ...

交換最小值和最大值

本題要求編寫程式,先將輸入的一系列整數中的最小值與第乙個數交換,然後將最大值與最後乙個數交換,最後輸出交換後的序列。注意 題目保證最大和最小值都是唯一的。輸入格式 輸入在第一行中給出乙個正整數n 10 第二行給出n個整數,數字間以空格分隔。輸出格式 在一行中順序輸出交換後的序列,每個整數後跟乙個空格...