Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <limits>
- #include <type_traits>
- template<typename T>
- constexpr auto is_bitwise_palindrome(T value)
- -> std::enable_if_t<std::is_unsigned_v<T>, bool> {
- constexpr int digits = std::numeric_limits<T>::digits;
- T left = T{1} << (digits - 1);
- T right = 1;
- const T middle = T{1} << ((digits / 2) - 1);
- while(right != middle) {
- if(static_cast<bool>(value & left) != static_cast<bool>(value & right)) {
- return false;
- }
- left >>= 1;
- right <<= 1;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement