首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找1的补码

查找1的补码
EN

Stack Overflow用户
提问于 2013-10-27 01:17:00
回答 2查看 15.9K关注 0票数 6

我正在尝试编写一个程序,在输入二进制数后计算1的补码。这就是我要说的:

代码语言:javascript
复制
import java.util.Scanner;
public class BitWiseComplement {
    public static void main(String[] args) {
        Scanner keysIn = new Scanner(System.in);
        System.out.println("Please enter your number: ");
        long originalNum = keysIn.nextLong();
        System.out.println(~originalNum);
  }
}

然而,当我输入0111011时,我得到-111012。我认为~运算符应该反转数字,这样所有的0都是1,所有的1都是0。

有什么帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2013-10-27 01:20:04

Java运算符的作用如您所想,但请记住,~中没有无符号类型,因此当您输入一个正数(即高位为0)时,对其应用~将使其为负数(通过打开高位)。

如果您以十六进制(或其他答案建议的二进制)打印出数字,您应该会看到预期的答案。

票数 1
EN

Stack Overflow用户

发布于 2021-12-29 15:18:09

  • 计算num中的位数。
  • 生成相同长度的1的掩码。
  • 与该数字进行异或以获得补码。

例如:9^15=6

代码语言:javascript
复制
  public static int solution(int num) {

    int bits = Integer.toBinaryString(num).length();
    int maxBound = (int)( Math.pow(2, bits)-1);
    return num ^ maxBound;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19609566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档