#include #include #include #define PRINTF_BINARY_PATTERN_INT8 "%c%c%c%c%c%c%c%c" #define PRINTF_BYTE_TO_BINARY_INT8(i) \ (((i)&0x80ull) ? '1' : '0'), (((i)&0x40ull) ? '1' : '0'), \ (((i)&0x20ull) ? '1' : '0'), (((i)&0x10ull) ? '1' : '0'), \ (((i)&0x08ull) ? '1' : '0'), (((i)&0x04ull) ? '1' : '0'), \ (((i)&0x02ull) ? '1' : '0'), (((i)&0x01ull) ? '1' : '0') #define PRINTF_BINARY_PATTERN_INT16 \ PRINTF_BINARY_PATTERN_INT8 PRINTF_BINARY_PATTERN_INT8 #define PRINTF_BYTE_TO_BINARY_INT16(i) \ PRINTF_BYTE_TO_BINARY_INT8((i) >> 8), PRINTF_BYTE_TO_BINARY_INT8(i) #define PRINTF_BINARY_PATTERN_INT32 \ PRINTF_BINARY_PATTERN_INT16 PRINTF_BINARY_PATTERN_INT16 #define PRINTF_BYTE_TO_BINARY_INT32(i) \ PRINTF_BYTE_TO_BINARY_INT16((i) >> 16), PRINTF_BYTE_TO_BINARY_INT16(i) #define PRINTF_BINARY_PATTERN_INT64 \ PRINTF_BINARY_PATTERN_INT32 PRINTF_BINARY_PATTERN_INT32 #define PRINTF_BYTE_TO_BINARY_INT64(i) \ PRINTF_BYTE_TO_BINARY_INT32((i) >> 32), PRINTF_BYTE_TO_BINARY_INT32(i) /* --- end macros --- */ template void print_type_max(T _) { std::cout << typeid(T).name() << "" } int main() { std::cout << (PRINTF_BINARY_PATTERN_INT64) << std::endl; auto last_known_point = 10981552822ULL, val = 10960094149ULL; printf("last_known_point = %llu, val = %llu\nlast_known_point - val " "= " PRINTF_BINARY_PATTERN_INT64 "\n", last_known_point, val, PRINTF_BYTE_TO_BINARY_INT64(last_known_point - val)); std::cout << std::numeric_limits::max() << std::endl; }