Invert Actual Bits of a Number in Java2025年5月8日 | 阅读 7 分钟 在 Java 中,反转数字的位数意味着将每个位从 0 翻转为 1,反之亦然。这可以通过按位非 (~) 运算符来实现。它常用于二进制操作和按位运算等任务,提供了一种翻转位模式的简单方法。 输入: 5 (二进制:0101) 输出: -6 (二进制:1010) 解释 当反转 5 的位数时,二进制表示 0101 变为 1010。在 Java 中,这种翻转还会改变符号位,从而导致负数。由于有符号整数使用的补码表示,二进制 1010 在十进制中对应于 -6。 按位反转方法Java 中按位反转的特性
算法步骤 1:输入数字: 该过程首先接受或提供一个您想反转其位数的 整数 值。此数字可以是十进制格式,因为 Java 以此格式处理整数。 步骤 2:理解二进制表示: 计算机中的每个数字都以二进制表示。您可以将数字视为一系列位(0 和 1)。如果您直接处理二进制数字,可以手动表示它们,但 Java 会在后台自动处理。 步骤 2.1:确定数字的范围: 在处理按位操作时,理解数字的范围至关重要。Java 的 int 类型使用 32 位,可以表示从 -231 到 231 - 1 的值。范围有助于理解数字的二进制大小以及反转将如何影响它,尤其是在符号翻转和潜在溢出方面。 步骤 3:应用按位非运算符: 反转位的核心操作是按位非运算符 (~)。当您将此运算符应用于一个数字时:数字中的每个 0 都变为 1。每个 1 都变为 0。本质上,您正在翻转所有位。 步骤 4:考虑符号位: 在有符号整数(如 Java 使用的整数)中,最高有效位(最左边的位)指示数字是正数还是负数。翻转位时,也会翻转此符号位。
步骤 5:解释结果: 反转位后,我们得到一个新数字。新数字表示原始数字的二进制补码。如果符号位已被翻转,结果可能是负数。 步骤 5.1:考虑补码表示: 在解释结果时,重要的是要记住 Java 使用补码表示法来表示有符号整数。 这意味着最高有效位决定了数字的符号。如果反转的数字是负数,Java 将使用补码自动解释它,从而得到正确的负值。 步骤 6:返回或显示结果: 最后,通常会返回或显示结果。如果您使用的是 Java,结果将自动从其二进制形式转换为十进制数字,您将看到反转位的输出。 输出 Inverted bits of 5 is: -6 复杂度分析时间复杂度反转数字位的时间复杂度为 O(1)。这是因为按位非操作以恒定时间工作,与数字的大小无关。它只是翻转数字的每一位,并且此过程独立于数字的值或大小。 空间复杂度反转数字位的空间复杂度为 O(1)。该操作仅需要恒定的空间量,因为它会就地修改数字,而无需与输入大小成比例的额外内存。仅使用一个变量来存储结果。 优点
手动位操作方法算法步骤 1:输入数字: 第一步是获取要反转其位的数字。此数字以整数形式提供,Java 将其视为 32 位有符号整数。 步骤 2:初始化结果变量: 创建一个变量来存储反转位后的结果。从 0 开始。此变量将在翻转原始数字的每一位后累积新位。 步骤 2.1:确定位数: 由于 Java 使用 32 位整数,因此您知道循环将运行 32 次以处理数字的每一位。 步骤 3:循环遍历每一位: 使用循环处理数字的每一位。循环将从最低有效位(最右边的位)迭代到最高有效位(最左边的位)。对于每一位 向右移动数字 i 位。应用按位 AND (& 1) 来提取当前位。 步骤 3.1:跟踪当前位的位置: 随着循环的进行,请跟踪数字中当前的位位置。这对于将每一位反转后正确移位并放置到结果变量中至关重要。位位置由循环计数器 i 确定,i 从 0(最低有效位)开始,一直到 31(最重要的位)。它确保位操作从右到左正确进行。 步骤 4:反转位: 提取位后,将其翻转。如果位是 0,则将其更改为 1;如果位是 1,则将其更改为 0。这是通过从 1 中减去当前位来完成的。 步骤 5:在结果中设置位: 位反转后,将其移回正确的位置,并使用按位 OR (|) 将其设置到结果变量中。这确保了新的反转位被正确放置。 步骤 6:对所有位重复: 对所有 32 位重复此过程。循环将处理每一位,反转它,并将其设置到结果变量中。 步骤 6.1:处理溢出或边缘情况: 在某些情况下,可能需要检查结果是否溢出或是否存在边缘情况,尤其是在处理大数字或需要确保结果在特定范围内时(例如,对于自定义整数大小)。 步骤 7:返回结果: 处理完所有位后,最终结果将是所有位都已反转的数字。返回或显示结果。 输出 Inverted bits of 5 is: -6 复杂度分析时间复杂度程序的时间复杂度为 O(1),因为循环运行固定次数的迭代(Java 中的整数为 32 位)。迭代次数不取决于输入的大小,因此这是一个恒定时间操作。 空间复杂度此方法在 O(1) 空间复杂度下运行,因为它仅使用恒定的内存量。结果 变量 和其他几个变量(如循环计数器和位掩码)会被使用,但它们的内存使用量不会随着输入的大小而增长,因此这是一个恒定空间操作。 优点
下一个主题Java BF |
双重花括号初始化是 Java 中一种用于以简洁方便的方式初始化类实例并为其字段提供初始值的一种技术。它涉及在实例化代码块中使用嵌套花括号。尽管这种方法可以...
阅读 4 分钟
PermGen 代表永久代。它是一种特殊的堆空间。它独立于主内存(堆)。JVM 使用 PermGen 来跟踪已加载的类元数据。所有静态内容都由 JVM 存储到此内存区域。静态内容...
阅读 2 分钟
Java 中的异步编程允许任务独立执行,而不会阻碍主线程,从而提高性能和响应能力。它通常用于管理并发操作、后台任务和 I/O 处理。Java 中的异步技术回调和回调地狱:回调充当提醒,在任务完成时通知...
5 分钟阅读
异常处理是处理运行时错误最强大的机制之一,可以维护应用程序的正常流程。在 Java 中,异常是一种异常情况。Java 编程语言定义了各种异常。在本节中,我们将讨论...
阅读 3 分钟
澳大利亚国立大学探索了函数式编程作为一种声明式编程范例,它将数学函数作为求值,同时拒绝状态修改或可变数据更改。Java 中函数式编程的采用始于 Java 8,通过实现 lambda 表达式以及函数式接口和 Stream API...
5 分钟阅读
Java 是最流行和广泛使用的面向对象编程语言。它为开发人员提供了开发各种应用程序(如 Web、桌面应用程序、游戏等)的平台。使用 Java 编程语言的原因是它提供了安全性、可靠性,并且速度也很快。编写代码...
5 分钟阅读
Collection 类中的 Comparator 机制中的 sort() 方法按降序对数据进行排序。如果我们想在考虑用户定义对象排序的边界条件的情况下实现泛型目标,我们可以使用 Comparator 接口。...
阅读 3 分钟
Java 中的不可达代码或语句是 Java 初学者常见的问题。这是一种编译时错误。许多新手开发者将此错误与死代码(另一种 Java 相关现象)混淆。尽管两者在表现上相似,但两者之间存在细微差别...
阅读 4 分钟
在本节中,我们将了解什么是起伏数,并创建 Java 程序来检查给定数字是否为起伏数。起伏数程序经常在 Java 编码面试和学术界中被问到。起伏数 一个起伏数是...
阅读 3 分钟
“对象切片”一词指的是当派生类对象被分配给基类实例时发生的情况。它会导致派生类对象丢失方法和成员变量。这被称为信息切片。作为...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India