Java中的相同内容是什么?
for (i = (sizeof(num)*8-1); i; i--)
num
被赋予数字,而不是数组。我想以整数反转位。
答案 0 :(得分:4)
Java没有sizeof
。数组具有length
属性,许多集合都有size()
和类似的东西,但任何对象的语言sizeof
都不受支持且不需要。
要获取从least significant bit到most significant bit的整数位,您可以执行以下操作:
int num = 0xABCD1234;
System.out.println(Integer.toBinaryString(num));
for (int i = 0; i < Integer.SIZE; i++) {
System.out.print((num >> i) & 1);
}
打印:
10101011110011010001001000110100 // MSB-LSB order from toBinaryString
00101100010010001011001111010101 // LSB-MSB order from the loop
因此,在这种特定情况下,sizeof * 8
转换为Integer.SIZE
,“用于表示二进制补码二进制形式的int值的位数”。在Java中,这是固定为32。
JLS 4.2.1 Integral types and values
对于
int
,从-2147483648
到2147483647
,包括
答案 1 :(得分:1)
此循环可能以相反的顺序迭代数组。在这种情况下,它是'num'对象的数组,并且数组中有8个元素('-1'是必需的,因为8个元素的数组具有有效的索引0 ... 7。)
要在Java中执行此操作,等效的是:
for(int i = array.length-1; i >= 0; --i)
答案 2 :(得分:0)
Java以虚拟机为目标,类型的大小是不变的。
如果num是int,则为4个字节(32位)。如果它很长,则为8字节(64位)。
此外,您不能将变量视为字节数组。您必须使用按位运算符(移位和/或等)来操作基元中的位,如int或long。
答案 3 :(得分:0)
没有直接的等价物。 sizeof以字节为单位返回类型的大小或表达式的类型,并且此信息在Java中不可用。
这不是必需的,因为内置类型的字节大小是固定的,数组的长度是使用.length
伪字段获得的,而对象的内存是使用new
分配的,所以对象大小不是必需的。
如果你告诉使用num的类型,那么就可以翻译它。
答案 4 :(得分:0)
除了polygenelubricants的答案之外,还有另一种方法可以在Java中反转整数位:
int reversed = Integer.reverse(input);
容易!
值得查看Integer.reverse的源代码,它相当漂亮(而且非常可怕)。