Java rotateLeft 和 rotateRight 方法

这篇博客很清楚的解答了我对 Integer.rotateLeft() 方法的理解,在这之前我花费了好几个小时找了多篇博客都没有说到重点。 博客原文 正文 这两个方法实现的思想是循环左移和循环右移。首先来理解这两个概念 循环移位就是把数值变成二进制,然后循环移动的过程;换句话说,循环移位就是将移出的低位放到该数的高位(循环右移)或把移出的高位放到该数的低位(循环左移),左移,和右移动都是对整数进行的操作,在Win32控制台应用程序中,整形占4Byte节32bit。 循环左移的过程: 循环左移的过程可以分为3步: 将x左端的n位先移动到y的低n位中,x>>(32-n); 将x左移n位,其右面低位补0,x< 进行按位或运算(x >> (32 - n) | (x << n)); 循环右移的过程: 循环右移的过程可以分为3步: 1. 将x的左端的低n位先移动到y的高n位中 x<<(32-n) 2. 将x右移n位,其左面高n位补 0x>>n; 3. 进行按位或操作 (x << (32 - n) | (x >> n)); 上代码: public static long rotateLeft(long i, int distance) { return (i << distance) | (i >>> -distance); } public static long rotateRight(long i, int distance) { return (i >>> distance) | (i << -distance); } 实现的代码量可以说已经精简到最少了,有一点要注意的是,循环移位时,参数distance可以接受负数,当 distance 为负数时,这个等式是成立的,rotateLeft(i, distance) = rotateRight(i, -distance)。这个方法中有两点值得借鉴的,第一从整体上讲循环移位的实现方式;第二是 distance 与 -distance 的巧妙运用。...

December 23, 2021 · 3 min · 462 words · ha0zi

计算小技巧

说明 本文准备长期更新,以记录工作、学习中发现的一些关于计算的小技巧。 目前仅掌握了 JAVA,以后的案例随着掌握的语言可能不限于 JAVA 当除数为 10 的 n 次幂; 提防精度丢失,可以考虑使用字符串分割然后拼接的方式获取结果 // 计算 432843 / 10^3 int a = 432843; String aStr = String.valueOf(a); Strint aLen = aStr.subtring(0, 3) String aReg = aStr.subtring(3, 7); return Integer.valueOf(aLen + "." + aReg);

October 23, 2021 · 1 min · 40 words · ha0zi