#include <iostream>
#include <string>
#include <tuple>  
#include <utility>  
#include <array>  
#include <string>  
template<char...>
struct STRING 
{
};
template<typename>
struct STRING_LITERAL;
template<char... S>
struct STRING_LITERAL<STRING<S...>> 
{
  static const char s[sizeof...(S)+1];
};
template<char... S>
const char STRING_LITERAL<STRING<S...>>::s[sizeof...(S)+1] = {S..., 0};
template<typename>
struct MOD;
template<>
struct MOD<unsigned char> 
{
  using TYPE = STRING<'h', 'h', 'u'>;
};
template<>
struct MOD<signed char> 
{
  using TYPE = STRING<'h', 'h', 'u'>;
};
template<>
struct MOD<unsigned short> 
{
  using TYPE = STRING<'h', 'u'>;
};
template<typename, typename>
struct CONCAT;
template<char... S1, char... S2>
struct CONCAT<STRING<S1...>, STRING<S2...>> 
{
  using TYPE = STRING<S1..., S2...>;
};
template<char...>
struct CONVERT;
template<>
struct CONVERT<> {
  using TYPE = STRING<>;
};
template<char... S>
struct CONVERT<'`', '`', S...> 
{
  using TYPE = typename CONCAT<STRING<'`'>, typename CONVERT<S...>::TYPE>::TYPE;
};
template<char... S>
struct CONVERT<'`', '8', 'u', S...> 
{
  using TYPE = typename CONCAT<typename MOD<uint8_t>::TYPE, typename CONVERT<S...>::TYPE>::TYPE;
};
template<char... S>
struct CONVERT<'`', '8', 'd', S...> 
{
  using TYPE = typename CONCAT<typename MOD<int8_t>::TYPE, typename CONVERT<S...>::TYPE>::TYPE;
};
template<char C, char... S>
struct CONVERT<C, S...> 
{
  using TYPE = typename CONCAT<STRING<C>, typename CONVERT<S...>::TYPE>::TYPE;
};
template<typename, typename>
struct MAKE_STRING;
template<typename S, template<typename U, U...> class T, typename U, U... I>
struct MAKE_STRING<S, T<U, I...>> 
{
  using TYPE = typename CONVERT<S{}.s[I]...>::TYPE;
};
template<typename S>
using FORMAT_STRING = STRING_LITERAL<typename MAKE_STRING<S, std::make_index_sequence<sizeof(S)-1>>::TYPE>;
#define FORMAT(str) ({ struct S { const char s[sizeof(str)] = (str); }; FORMAT_STRING<S>::s;})
int main()
{
  uint8_t x = 100;
  printf(FORMAT("``%`8u\n"), x);
  
}

printf 整数类型都用 uint8_t的更多相关文章

  1. C/C++中有关字长与平台无关的整数类型

    在C/C++中,整型的长度跟编译器相关,编译器的实现取决于CPU. 比如TC++是DOS16下的应用程序,DOS16是16位的操作系统,所以TC++中sizeof(int)==16:同理win32中s ...

  2. mysql int 整数类型 解释显示宽度 和 存储宽度

    存储宽度 是实际存储记录宽度 存储宽度默认是写死的,就算修改宽度也改变不了,改变的是显示宽度 ============有符号和无符号int============= 创建一个 无符号的 int 整数类 ...

  3. [C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器

    作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.htm ...

  4. C语言-整数类型

    C语言-整数类型 整数类型 Reg为寄存器 字长,是说这个寄存器是多少宽的,每个寄存器可以表示32bit数据,也是说CPU与RAM每一次传递的数据也是32bit 计算机内部一切都是二进制 所有的类型, ...

  5. 3.2 Go整数类型

    1. Go整数类型 Go语言的数值类型包含不同大小的整数型.浮点数和负数,每种数值类型都有大小范围以及正负符号. 官方文档解释数据类型 int类型中哪些支持负数 有符号(负号):int8 int16 ...

  6. [C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释

    新版本—— http://www.cnblogs.com/zyl910/p/zlstdint_v100.html[C] zlstdint(让VC.TC等编译器自动兼容C99的整数类型)V1.0.支持T ...

  7. java中整数类型(short int long)的存储方式

    在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1.基本类型:short 二进制位数:16包装 ...

  8. [改善Java代码]用整数类型处理货币

    建议22:用整数类型处理货币. public class Client { public static void main(String[] args) { System.out.println(&q ...

  9. 第4章 类型基础 -- 4.1 所有类型都从System.Object派生

    4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证 ...

随机推荐

  1. dyld: Library not loaded...

    Libraries and frameworks are designated as Required by default, but you can change this designation ...

  2. ASP.NET收发邮件

    在.NET中常见到在线发邮件的实例,网站加上这个功能可以方便站长与用户的交流. NET 中发邮件有时候会用到IIS组件中的邮件服务器,不过复杂.对虚拟主机的配置也较麻烦, 也可用第三方组件比如Jmai ...

  3. win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0)

    win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0)  用vs 2015打开 编译Release ...

  4. C++ 中queue(队列)的用法

    #include <iostream>#include <queue>#include <assert.h>/*调用的时候要有头文件: #include<st ...

  5. ODOO-10.0 错误 Could not execute command 'lessc'

    2017-01-05 20:24:12,473 4652 INFO None odoo.service.db: Create database `hello`. 2017-01-05 20:24:16 ...

  6. 安装mysql因为/tmp权限不足而导致ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)的解决方案

    本机是centos 6.5  安装的mysql是5.1的版本. 在安装mysql之后,第一次启动mysql服务的时候,需要/tmp有777(rwxrwxrwx)的权限,然而楼主的/tmp是755(rw ...

  7. 前端学习 第二弹: JavaScript中的一些函数与对象(1)

    前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...

  8. C语言新文法

    程序->外部声明 | 程序 外部声明 程序->外部声明A' A'->外部声明A'|ε 外部声明->修饰符 变量名 形参 修饰符->void | int | char | ...

  9. 关于VS2010无法编译问题

    cvtres.exe 近来遇到无法编译问题,编译后debug之类文件全部为空,纠结好久才发现还是一个以前遇到解决过的问题...= = C:\Windows\Microsoft.NET\Framewor ...

  10. GC 源码分析

    java对象的内存分配入口 Hotspot 源码解析(9) •内存代管理器TenuredGeneration对垃圾对象的回收2015-01-18阅读1154 •内存代管理器DefNewGenerati ...