gpt4 book ai didi

java 位运算符,abs power

转载 作者:行者123 更新时间:2023-11-30 09:27:40 26 4
gpt4 key购买 nike

研究一种方法,该方法将接受一个整数 (num) 和一个整数 (n),该整数将接受 n 位数字的绝对值。我相信我的逻辑是正确的,已经在纸上完成并成功了,但代码似乎已关闭。非常感谢所有帮助!

/**
* Take the absolute value of an n-bit number.
*
* Examples:
* abs(0x00001234, 16); // => 0x00001234
* abs(0x00001234, 13); // => 0x00000DCC
*
* Note: values passed in will only range from 1 to 31 for n.
*
* @param num An n-bit 2's complement number.
* @param n The bit length of the number.
* @return The n-bit absolute value of num.
*/
public static int abs(int num, int n)
{
int shifter = num << (n+1);
int newInt = num & ~shifter;
return newInt;

}

最佳答案

我认为没有一个位掩码可以同时适用于正面和负面情况。

首先通过检查第n位是否为1来测试数字是否为负数;如果不是,则返回原件,否则返回二进制补码。

像这样的东西看起来很有效:

public static int abs(int num, int n)
{
int shifter = -1 << (n - 1);
if ((num & shifter) == 0)
return num;
shifter = shifter << 1;
return (~num + 1) & ~shifter;
}

例如,假设您将 0x1FFF 作为 16 位数字传入,因此它是正数。
-1 << 15将是 0xFFFF8000(最低 15 位为 0,其余为 1),0xFFFF8000 和 0x00001FFF 为 0,您返回原始数据。

另一方面,如果 0x1FFF 仅被视为 13 位,则它是负数。 num & shifter将为 1,因为两者都设置了第 13 位。现在通过翻转位和加一来进行二进制补码。因为您将翻转所有 32 位,所以您需要使用位掩码将所有剩余位清零。原文shifter如果您将它再向左推一点并反转它,它就会起作用。

关于java 位运算符,abs power,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14431512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com