微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

此代码块如何避免硬编码编程面试问题 5.1 的要素

如何解决此代码块如何避免硬编码编程面试问题 5.1 的要素

我最近开始准备工作面试,遇到了这个示例问题,它要求我们找出一个数字中有多少位设置为 1,然后回答代码块。

以下程序一次测试一个位,从最少的开始 重要的一点。它说明了移动和掩蔽它还显示 如何避免硬编码整数字的大小

public static short countBits(int x){

        short numBits = 0;
        while (x != 0){
            numBits += (x & 1);
            x = x >>> 1;
        }
        return numBits;
    }

我不明白这里编码如何避免硬编码。维基百科文章谈到了硬编码;

硬编码是嵌入数据的软件开发实践 直接进入程序或其他可执行对象的源代码, 与从外部来源获取数据或生成数据相反 它在运行时。

在本文中,它表示如果我们直接从源代码获取数据,我们就是硬编码。这正是我们在方法中所做的。我们从源代码获取数据:

参数 → int x 是硬编码的。

我不明白的第二部分是我们如何没有硬编码 size of the integer word。 这是什么意思?

解决方法

您没有在执行 x&1+(x>>>1)&1+(x>>>2)&1+...(x>>>63)&1for(int i=0; i<64; i++) { ... }。这两者都假设整数有 64 位 (顺便说一句,这会花费不必要的更多时间,因为整数在 java 中只使用 32 位,但这就是您想要避免硬编码的原因)。你的方法不关心一个整数有多少位,它只关心它的某个地方仍然有 1。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。