190.js 893 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. 'use strict'
  2. /**
  3. * @param {number} n - a positive integer
  4. * @return {number} - a positive integer
  5. */
  6. var reverseBitsOld = function (n) {
  7. let res = 0
  8. let last
  9. for (let i = 0; i < 32; i++) {
  10. last = n & 1
  11. n >>= 1
  12. res <<= 1
  13. res += last
  14. }
  15. return res >>> 0
  16. }
  17. // [note] in js, signed -> unsigned: n >>> 0
  18. var reverseBits = function (n) {
  19. for (let i = 0, j = 31; i <= j; i++, j--) {
  20. let bit = (1 << i & n) >>> i ^ (1 << j & n) >>> j
  21. n ^= bit << j
  22. n ^= bit << i
  23. }
  24. return n >>> 0
  25. }
  26. function __main__() {
  27. /*eslint no-console: ["error", { allow: ["log"] }] */
  28. console.log(reverseBits(4294967295))
  29. console.log(reverseBits(43261596))
  30. console.log(reverseBits(1))
  31. console.log(reverseBitsOld(4294967295))
  32. console.log(reverseBitsOld(43261596))
  33. console.log(reverseBitsOld(1))
  34. }
  35. __main__()