【问题标题】:Question about sizeof. I want to reverse bits in number关于sizeof的问题。我想反转位数
【发布时间】:2025-11-26 21:10:01
【问题描述】:

在 Java 中与此等价的是什么?

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

num 是给定的数字,而不是数组。我想反转整数位。

【问题讨论】:

  • i–?用破折号?我猜你的意思是i-- 并相应地编辑了你的问题,如果我错了,请随时回复!
  • 顺便说一句,int 值在 java 中始终为 32 位。它们不像在 C 中那样变化。

标签: java loops integer bit-manipulation sizeof


【解决方案1】:

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

相关问题


按 LSB-MSB 顺序获取整数位

要从其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,从-21474836482147483647,包括

【讨论】:

    【解决方案2】:

    这个循环很可能以相反的顺序遍历一个数组。在这种情况下,它是一个由“num”个对象组成的数组,并且数组中有 8 个元素(“-1”是必要的,因为 8 个元素的数组的有效索引为 0...7)。

    要在 Java 中做到这一点,相当于:

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

    【讨论】:

      【解决方案3】:

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

      Java 以虚拟机为目标,类型的大小是恒定的。

      如果 num 是一个 int,它是 4 个字节(32 位)。如果很长,则为 8 字节(64 位)。

      此外,您不能将变量视为字节数组。您必须使用按位运算符(移位和等)来操作 int 或 long 等基元中的位。

      【讨论】:

      • 严格来说,int 在 Java 运行时永远不会被定义为 4 个字节。唯一定义的是int 的可能值范围(强烈暗示4 字节int)以及int 常量如何存储在类文件中。但是,那些意味着int 必须正好是 4 个字节。
      【解决方案4】:

      没有直接的等价物。 sizeof 以字节为单位返回类型的大小或表达式的类型,而此信息在 Java 中不可用。

      不需要,因为内置类型的字节大小是固定的,数组长度使用.length伪字段获取,对象内存使用new分配,所以对象大小为不需要。

      如果你告诉 use num 的类型是什么,那么它可以被翻译。

      【讨论】:

        【解决方案5】:

        除了 polygenelubricants 的回答之外,还有另一种方法可以在 Java 中反转整数的位:

        int reversed = Integer.reverse(input);
        

        简单!

        值得查看 Integer.reverse 的源代码,它相当漂亮(而且非常可怕)。

        【讨论】:

          最近更新 更多