Java中Swifts整数“溢出运算符”&*,&+和&-的等效项是什么?

问题描述 投票:1回答:1

Swift提供了所谓的“溢出运算符”&*,* +,&-,用于整数运算(Swift Advanced Operators)。它们旨在在执行可能导致溢出的操作时截断可用位数。例如:

var unsignedOverflow = UInt8.max // --> 255
unsignedOverflow = unsignedOverflow &+ 1 // --> 0, instead of overflow

由于Java不支持无符号整数,因此可能没有真正的等价物。在Java 8中,有类似Integer.toUnsignedLong(int)Integer.divideUnsigned(...)Java 8 Class Integer)的函数,但是很遗憾,我无法使用此版本的Java。

是否有某种(简便)的方法来模仿上述行为?

编辑:我要达到的目的是在Java中相乘并加上正整数值,以便结果始终是正整数值。我尝试使用%运算符,但它返回的余数可以是负数。

java integer overflow unsigned truncation
1个回答
0
投票

Java没有无符号数字。但是,您可以通过丢弃不需要的位来达到类似的结果:

使用intlong,对于您的范围就足够了。然后,对于每个操作,清除范围上方的位:

int abc = 255;
abc += 10;
abc &= 0xFF; // clears any bits other then least significant 8. 
System.out.println(abc); // --> 9
© www.soinside.com 2019 - 2024. All rights reserved.