Advertisement
Radfler

::is_bitwise_palindrome

Feb 26th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.50 KB | None | 0 0
  1. #include <limits>
  2. #include <type_traits>
  3.  
  4. template<typename T>
  5. constexpr auto is_bitwise_palindrome(T value)
  6. -> std::enable_if_t<std::is_unsigned_v<T>, bool> {
  7.  
  8.     constexpr int digits = std::numeric_limits<T>::digits;
  9.  
  10.     T left = T{1} << (digits - 1);
  11.     T right = 1;
  12.     const T middle = T{1} << ((digits / 2) - 1);
  13.    
  14.     while(right != middle) {
  15.  
  16.         if(static_cast<bool>(value & left) != static_cast<bool>(value & right)) {
  17.             return false;
  18.         }
  19.  
  20.         left >>= 1;
  21.         right <<= 1;
  22.  
  23.     }
  24.  
  25.     return true;
  26.  
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement