java int类型数据溢出问题 时钟 原码 反码 补码 二进制

上去几个月做了一个项目,上游方传过来的金额数据是负的,当时我有疑惑,后面问了上游说数据没有负的,鉴于数据存储用了int类型,对应的最大值是2147483647,即2亿多。由于存储的金额按照最小单位来存储,即分,按月的数据超过了两百多万,即超过了int表示的正数的最大值。

鉴于java里数字类型按照补码来区分正负,按照二进制来讲,第一位是标志位,超过这个数就会从负数开始算,这是二进制中补码的时钟理论,具体可以看一下文章,里面有讲解。

java中原码、反码和补码--时钟理解法-CSDN博客

int 类型最大值(按照无符号计算)

2^32-1=4,294,967,295,九位,对半算的话就是 2147483647

long 类型最大值(按照无符号计算)

2^64-1=18,446,744,073,709,551,615,二十位,对半算的话就是 9223372036854775807,一般的日常金额不会达到这个量级。

用于金额四则运算非除法的话最好还是用 long 来处理,这样就不用浮点相关的处理以及类型溢出的情况发生。

你可能感兴趣的:(数据类型,java,开发语言)