左右移位运算符(<<和>>)已在C++中可用.但是,我无法找到如何执行循环移位或旋转操作.
如何执行"向左旋转"和"向右旋转"等操作?
在这里向右旋转两次
Initial --> 1000 0011 0100 0010
Run Code Online (Sandbox Code Playgroud)
应该导致:
Final --> 1010 0000 1101 0000
Run Code Online (Sandbox Code Playgroud)
一个例子会有所帮助.
(编者注:如果旋转计数为零,许多常见的表达方式在C中旋转会受到未定义的行为的影响,或者编译为不止一个旋转机器指令.这个问题的答案应记录最佳实践.)
在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) 我知道我可以简单地从迭代start到end和清除这些细胞,但我想知道,如果它(可能使用JNI-ED是任何更快的方式可能System.arrayCopy)?
Java API中有许多内在函数的方法,但在查看源代码时仍然有与它们相关的代码.
例如,Integer.bitCount()是一个内在函数,但如果打开Integer类文件,则可以看到它的代码.
如果编译器/ jvm不一定使用此代码,那么该代码可以用于什么目的?
使用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的一个(如下图所示),我们可以看到,无论是 …
我想做以下事情
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) 什么是位数的大 O?我不确定该方法是如何工作的,但我认为它是在 O(logn) 中完成的。
特别是使用此代码(其中 x = 4,y = 1):
return Integer.bitCount(x^y);
Run Code Online (Sandbox Code Playgroud)