从C#迁移到Java、int&;ushort(按位和)
我得到了一段用C语言编写的代码,我必须迁移到Java。在C#中,代码归结为:从C#迁移到Java、int&;ushort(按位和),java,c#,bit-manipulation,Java,C#,Bit Manipulation,我得到了一段用C语言编写的代码,我必须迁移到Java。在C#中,代码归结为: int foo = getFooValue(); UInt16 bar = 0x0080; if((foo & bar) == 0) { doSomeCoolStuff() } 既然java没有无符号的数字类型,我该如何在java中做到这一点呢?您不必担心无符号的类型,因为0x0080(十进制128)完全填充了short,其最大值为32767 public static void main(String
int foo = getFooValue();
UInt16 bar = 0x0080;
if((foo & bar) == 0)
{
doSomeCoolStuff()
}
既然java没有无符号的数字类型,我该如何在java中做到这一点呢?您不必担心
无符号的
类型,因为0x0080
(十进制128
)完全填充了short
,其最大值为32767
public static void main(String[] args)
{
short flag = 0x0080;
int foo1 = 128; // 0x00000080
if ((foo1 & flag) == 0)
System.out.println("Hit 1!");
int foo2 = 0; // 0x00000000
if ((foo2 & flag) == 0)
System.out.println("Hit 2!");
int foo3 = 27698; // 0x00006C32
if ((foo3 & flag) == 0)
System.out.println("Hit 3!");
}
// Output: Hit 2! Hit 3!
在这种特殊情况下,您可以使用
int
(即使它已签名)。@KlitosKyriacou是正确的。无符号int的思想是,它允许您将正值拟合为正常int值的两倍(即uint16
的65535
)。但是,在这种情况下,您的值是128
,这绝对符合正常的int16
,并且由于常量条是用十六进制定义的,并且仅用于逻辑运算,因此即使该值属于负区域,也无所谓。@ZakiAnwarHamdani实际上是这样,因为它与int
进行比较。有符号的负短字符将在左侧扩展为两个字节的1,而无符号的负短字符将在左侧扩展为0。为什么还要使用任何“窄”类型?您可以在C#和Java中使用int
。