相关疑难解决方法(0)

C++中循环移位(旋转)操作的最佳实践

左右移位运算符(<<和>>)已在C++中可用.但是,我无法找到如何执行循环移位或旋转操作.

如何执行"向左旋转"和"向右旋转"等操作?

在这里向右旋转两次

Initial --> 1000 0011 0100 0010
Run Code Online (Sandbox Code Playgroud)

应该导致:

Final   --> 1010 0000 1101 0000
Run Code Online (Sandbox Code Playgroud)

一个例子会有所帮助.

(编者注:如果旋转计数为零,许多常见的表达方式在C中旋转会受到未定义的行为的影响,或者编译为不止一个旋转机器指令.这个问题的答案应记录最佳实践.)

c c++ bit-manipulation c++-faq rotation

84
推荐指数
9
解决办法
10万
查看次数

String.equals实现

在JDK 8中,String.equals实现为

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

为什么迭代使用两个操作 - 递增i和递减n而不是类似的东西:

while (i < n) {
    if …
Run Code Online (Sandbox Code Playgroud)

java string equals

11
推荐指数
1
解决办法
197
查看次数

将Java数组中任意范围的元素设置为null的最快方法是什么?

我知道我可以简单地从迭代startend和清除这些细胞,但我想知道,如果它(可能使用JNI-ED是任何更快的方式可能System.arrayCopy)?

java performance java-native-interface arraycopy

11
推荐指数
1
解决办法
582
查看次数

为什么java内部函数仍然有代码?

Java API中有许多内在函数的方法,但在查看源代码时仍然有与它们相关的代码.

例如,Integer.bitCount()是一个内在函数,但如果打开Integer类文件,则可以看到它的代码.

如果编译器/ jvm不一定使用此代码,那么该代码可以用于什么目的?

java intrinsics

8
推荐指数
2
解决办法
976
查看次数

JVM JIT方法重新计算纯方法

使用jmh对以下Java代码进行基准测试:

interface MyInterface {
    public int test(int i);
}

class A implements MyInterface {
    public int test(int i) {
        return (int)Math.sin(Math.cos(i));
    }
}

@State(Scope.Thread)
public class MyBenchmark {
    public MyInterface inter;

    @Setup(Level.Trial)
    public void init() {
        inter = new A();
    }

    @Benchmark
    public void testMethod(Blackhole sink) {
        int[] res = new int[2];
        res[0] = inter.test(1);
        res[1] = inter.test(1);
        sink.consume(res);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用mvn package && java -XX:-UseCompressedOops -XX:CompileCommand='print, *.testMethod' -jar target/benchmarks.jar -wi 10 -i 1 -f 1,我是能够得到大会,如果我们着眼于从C2的一个(如下图所示),我们可以看到,无论是 …

java assembly jit jvm jmh

7
推荐指数
1
解决办法
189
查看次数

为什么Math.max在Java中如此昂贵?

我想做以下事情

int sum = x+y;
sum = Math.max(sum,x);
Run Code Online (Sandbox Code Playgroud)

但是这行代码往往需要更长的时间

int sum = x+y;
if(x>sum)sum=x;
Run Code Online (Sandbox Code Playgroud)

我希望这不是不恰当的问题,但有人可以解释为什么会这样吗?

我已经查看了源代码,所有Java都在做

return (a >= b) ? a : b;
Run Code Online (Sandbox Code Playgroud)

java math

3
推荐指数
1
解决办法
293
查看次数

Java - bitCount() 的大 O?

什么是位数的大 O?我不确定该方法是如何工作的,但我认为它是在 O(logn) 中完成的。

特别是使用此代码(其中 x = 4,y = 1):

return Integer.bitCount(x^y);
Run Code Online (Sandbox Code Playgroud)

java big-o bitcount

3
推荐指数
1
解决办法
1397
查看次数