#include <stdint.h>

#ifndef _SUFFIX_KMG_
#define _SUFFIX_KMG_

/// 数值常量加尾缀_K，代表乘以1024，数据类型为size_t。例如4_K代表4096。
inline constexpr size_t   operator "" _K (size_t x) { return         x * 1024;}
/// 数值常量加尾缀_iK，代表乘以1024，数据类型为int32_t。例如4_K代表4096。
inline constexpr int32_t  operator "" _iK(size_t x) { return int32_t (x * 1024); }
/// 数值常量加尾缀_uK，代表乘以1024，数据类型为uint32_t。例如4_K代表4096。
inline constexpr uint32_t operator "" _uK(size_t x) { return uint32_t(x * 1024); }

/// 数值常量加尾缀_M，代表乘以1024*1024，数据类型为size_t。如1_M代表1,048,576。
inline constexpr size_t   operator "" _M (size_t x) { return          x * 1024 * 1024;}
/// 数值常量加尾缀_iM，代表乘以1024*1024，数据类型为int32_t。如1_iM代表1,048,576。
inline constexpr int32_t  operator "" _iM(size_t x) { return int32_t (x * 1024 * 1024); }
/// 数值常量加尾缀_uM，代表乘以1024*1024，数据类型为uint32_t。如1_uM代表1,048,576。
inline constexpr uint32_t operator "" _uM(size_t x) { return uint32_t(x * 1024 * 1024); }

/// 数值常量加尾缀_G，代表乘以1024*1024*1024，数据类型为size_t。如1_G代表1,073,741,824
inline constexpr size_t   operator "" _G (size_t x) { return          x * 1024 * 1024 * 1024;}
// 由于32位以G为单位很容易溢出，因此不提供相关尾缀表示，建议用64位数。


/// 数值常量加尾缀_k，代表乘以1000，数据类型为size_t。如4_k代表4000
inline constexpr size_t   operator "" _k (size_t x) { return          x * 1000;}
/// 数值常量加尾缀_ik，代表乘以1000，数据类型为int32_t。如4_k代表4000
inline constexpr int32_t  operator "" _ik(size_t x) { return int32_t (x * 1000); }
/// 数值常量加尾缀_uk，代表乘以1000，数据类型为uint32_t。如4_k代表4000
inline constexpr uint32_t operator "" _uk(size_t x) { return uint32_t(x * 1000); }

/// 数值常量加尾缀_m，代表乘以1,000,000，数据类型为size_t。如1_m代表1,000,000
inline constexpr size_t   operator "" _m (size_t x) { return         x * 1000 * 1000;}
/// 数值常量加尾缀_im，代表乘以1,000,000，数据类型为int32_t。如1_m代表1,000,000
inline constexpr int32_t  operator "" _im(size_t x) { return int32_t (x * 1000 * 1000); }
/// 数值常量加尾缀_um，代表乘以1,000,000，数据类型为uint32_t。如1_m代表1,000,000
inline constexpr uint32_t operator "" _um(size_t x) { return uint32_t(x * 1000 * 1000); }

/// 数值常量加尾缀_g，代表乘以1,000,000,000，数据类型为size_t。如1_g代表1,000,000,000
inline constexpr size_t operator "" _g(size_t x){    return x * 1000 * 1000 * 1000;}

#endif
