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

来源:互联网 发布:淘宝买苹果平板可靠吗 编辑:程序博客网 时间:2024/05/29 02:09

在写代码的时候,尤其是数字计算的时候,我们会经常碰到计算边界的问题,也就是说溢出的问题,比如说:最小的负数-1会出现什么情况?最大的正整数+1会出现什么情况?

先看看下面的代码

package com.test;public class Test {public static void main(String[] args) {Test test = new Test();Operator op = test.getMaxInstance();test.printResult("MaxValue", op);op = test.getMinInstance();test.printResult("MiniValue", op);}public void printResult(String tag, Operator op) {System.out.println(tag + ": " + op.getValue());System.out.println(tag + "+1: " + op.add(1));System.out.println(tag + "-1: " + op.minues(1));}public Operator getMaxInstance() {return new MaxValue();}public Operator getMinInstance() {return new MinimalValue();}interface Operator {int add(int a);int minues(int b);int getValue();}class MaxValue implements Operator {final int value = 0x7fffffff;@Overridepublic int getValue() {return value;}@Overridepublic int add(int a) {return value + a;}@Overridepublic int minues(int a) {return value - a;}}class MinimalValue implements Operator {final int value = 0x80000000;@Overridepublic int add(int a) {return value + a;}@Overridepublic int minues(int b) {return value - b;}@Overridepublic int getValue() {return value;}}}

运行上面的代码结果是:

MaxValue: 2147483647MaxValue+1: -2147483648MaxValue-1: 2147483646MiniValue: -2147483648MiniValue+1: -2147483647MiniValue-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以及如何判断溢出。

0 0
原创粉丝点击