summaryrefslogtreecommitdiff
path: root/expt_0707.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'expt_0707.cpp')
-rw-r--r--expt_0707.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/expt_0707.cpp b/expt_0707.cpp
new file mode 100644
index 0000000..b3e51ff
--- /dev/null
+++ b/expt_0707.cpp
@@ -0,0 +1,40 @@
+
+#include <cstdio>
+#include <iostream>
+#include <limits>
+#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 <typename T> 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<size_t>::max() << std::endl;
+} \ No newline at end of file