Abh*_*kar 2 numbers integer-overflow addition unsigned-integer java-8
我正在使用Cay S. Horstmann的书"Java SE 8 for the Really Impatient"进行练习.基于Number
课程改进的练习之一是:
编写一个程序,使用值和无符号运算对0到2 32 - 1 之间的数字进行相加,减法,除法和比较
int
.说明原因divideUnsigned
并且remainderUnsigned
是必要的.
问题是,如果添加2个无符号整数,则总和可能溢出整数限制.我没有看到一种方法来防止这种情况,如果不使用long来存储总和并检查它是否大于Integer.MAX_VALUE
.是否可以仅使用整数执行此操作?
该两补用于整数值有整齐的属性,添加和减去您是否解释值作为符号或无符号是不相关的.
因此,即使在CPU级别,也没有用于添加/减去有符号或无符号数字的明确指令.一切都与解释有关.
因此,当使用带符号int
类型添加或减去两个无符号数时,结果可能会在有符号int
范围内溢出.但是,当使用Integer.toUnsignedString
结果打印现在的负数时,将是正确的无符号值,假设操作甚至没有在无符号整数值范围内溢出.
这就是为什么该类java.lang.Integer
仅在必要时提供特殊的无符号运算,即比较两个无符号值,用于除法和余数以及用于转换和转换String
(以及long
来自long
to 的类型转换int
已经足够用于另一个方向).
归档时间: |
|
查看次数: |
1627 次 |
最近记录: |