关于sizeof的问题。我想反转位数

时间:2010-06-07 07:19:58

标签: java loops integer bit-manipulation sizeof

Java中的相同内容是什么?

for (i = (sizeof(num)*8-1); i; i--)  

num被赋予数字,而不是数组。我想以整数反转位。

5 个答案:

答案 0 :(得分:4)

Java没有sizeof。数组具有length属性,许多集合都有size()和类似的东西,但任何对象的语言sizeof都不受支持且不需要。

相关问题


以LSB-MSB顺序获取整数位

要获取从least significant bitmost 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,从-21474836482147483647,包括

答案 1 :(得分:1)

此循环可能以相反的顺序迭代数组。在这种情况下,它是'num'对象的数组,并且数组中有8个元素('-1'是必需的,因为8个元素的数组具有有效的索引0 ... 7。)

要在Java中执行此操作,等效的是:

for(int i = array.length-1; i >= 0; --i)

答案 2 :(得分:0)

在C / C ++中,sizeof运算符告诉您变量或类型在当前目标平台上占用的字节数。也就是说,它取决于目标平台,因此有一个用于发现它的关键字。

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的源代码,它相当漂亮(而且非常可怕)。