Checking if the value is a palindrome in binary notation


1. Determine whether bit-wise representation of the integer is a palindrome. Consider all bits including leftmost zeros.
The idea is simple: use two pointers, left and right, first left pointer points to the left most bit, right pointer points to right most bit, check whether these 2 bit values are same, loop all 32 bit.

public static boolean isPalindrome(int n) {
 int count = 32;
 int right = 1;
 int left = 1 << (32 - 1);
 while (count > 0) {
   int leftBitValue = n & left, rightBitValue = n
    & right;
  if (!((leftBitValue == 0 && rightBitValue == 0) || (leftBitValue != 0 && rightBitValue != 0))) {
   return false;
  }
  left = left >> 1;
  right = right << 1;
  count -= 2;
 }
 return true;
}
Variant: Determine whether bit-wise representation of the integer is a palindrome. Ignore all leftmost zeros.
This means 5 = 101b is also a palindrome.
The idea comes from this link, I just converted it to java code:
public static boolean isPalindrome(int x) {
 int original = x, reverse = 0;
 while (x != 0) {
  reverse <<= 1;
  reverse += x & 1;
  x >>>= 1;
 }
 return reverse == original;
}
References
Fun with Bitwise Operations, Part 1

Labels

adsense (5) Algorithm (69) Algorithm Series (35) Android (7) ANT (6) bat (8) Big Data (7) Blogger (14) Bugs (6) Cache (5) Chrome (19) Code Example (29) Code Quality (7) Coding Skills (5) Database (7) Debug (16) Design (5) Dev Tips (63) Eclipse (32) Git (5) Google (33) Guava (7) How to (9) Http Client (8) IDE (7) Interview (88) J2EE (13) J2SE (49) Java (186) JavaScript (27) JSON (7) Learning code (9) Lesson Learned (6) Linux (26) Lucene-Solr (112) Mac (10) Maven (8) Network (9) Nutch2 (18) Performance (9) PowerShell (11) Problem Solving (11) Programmer Skills (6) regex (5) Scala (6) Security (9) Soft Skills (38) Spring (22) System Design (11) Testing (7) Text Mining (14) Tips (17) Tools (24) Troubleshooting (29) UIMA (9) Web Development (19) Windows (21) xml (5)