zoukankan      html  css  js  c++  java
  • 定义通用类型,便于移植和32位、64位的编译

    //要实现以后的方便移植,并且实现x64和x86的编译不报错,那肯定要先定义一些通用类型。
    //需要包含的头文件
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
    #include <algorithm>
    #include <iterator>
    #include <cctype>
    #include <vector>
    #include <iomanip>
    #include <functional>
    #include <random>
    #include <cmath>
    #include <cassert>
    

    通用类型以及一些有用的宏

    typedef char int8;//兼容char, int8_t, signed char
    typedef uint8_t u_int8;
    typedef int16_t int16;
    typedef uint16_t u_int16;
    typedef int32_t int32;
    typedef uint32_t u_int32;
    typedef int64_t int64;
    typedef uint64_t u_int64;
    typedef long double ldouble;
    
    #define MAKEINT16(x, y)  ((u_int16)(((u_int8)(((u_int32)(x)) & 0xff)) | ((u_int16)((u_int8)(((u_int32)(y)) & 0xff))) << 8))
    #define MAKEINT32(x,y)  ((u_int32)(((u_int16)(((u_int32)(x)) & 0xffff)) | ((u_int32)((u_int16)(((u_int32)(y)) & 0xffff))) << 16))
    #define MAKEINT64(x,y) ((u_int64)(((u_int32)(((u_int64)(x)) & 0xffffffff)) | ((u_int64)((u_int32)(((u_int64)(y)) & 0xffffffff))) << 32))
    #define LOWINT16(l) ((u_int8)(((u_int16)(l)) & 0xff))
    #define HIGHINT16(l) ((u_int8)((((u_int16)(l)) >> 8) & 0xff))
    #define LOWINT32(l) ((u_int16)(((u_int32)(l)) & 0xffff))
    #define HIGHINT32(l) ((u_int16)((((u_int32)(l)) >> 16) & 0xffff))
    #define LOWINT64(l) ((u_int32)(((u_int64)(l)) & 0xffffffff))
    #define HIGHINT64(l) ((u_int32)((((u_int64)(l)) >> 32) & 0xffffffff))
    
    #define radian(deg) ((M_PI / 180) * deg)
    #define degree(rad) ((180 / M_PI) * rad)
    
    #ifdef _WIN64
    typedef signed __int64 integer;
    typedef unsigned __int64 u_integer;
    #define MAKEINT(x, y) MAKEINT64(x,y)
    #define HIGHINT(l) HIGHINT64(l)
    #define LOWINT(l) LOWINT64(l)
    #else
    typedef signed __int32 integer;
    typedef unsigned __int32 u_integer;
    #define MAKEINT(x, y) MAKEINT32(x,y)
    #define HIGHINT(l) HIGHINT32(l)
    #define LOWINT(l) LOWINT32(l)
    #endif
    
    inline ldouble max(ldouble a, ldouble b) {
    	return a > b ? a : b;
    }
    
    inline ldouble min(ldouble a, ldouble b){
    	return a < b ? a : b;
    }

    两个经常用到的随机函数,不用伪随机了,而是用c++新特性里面的真正的随机函数

    inline ldouble random_ldouble(ldouble low = 0.0, ldouble high = 1.0) {
    	std::uniform_real_distribution<ldouble> distribution(low, high);
    	std::mt19937 generator;
    	static std::function<ldouble()> fdouble = std::bind(distribution, generator);
    	return fdouble();
    }
    
    inline integer random_integer(integer low = 0, integer high = std::numeric_limits<integer>::max()) {
    	std::uniform_int_distribution<integer> distribution(low, high);
    	std::mt19937 generator;
    	static std::function<integer()> finteger = std::bind(distribution, generator);
    	return finteger();
    }
    

      

    我把这个文件命名为Types.h,方便以后写通用32位和64位的程序使用。并且我把关键代码全放到了lib里面(新建项目时,选择静态lib就行了),方便其他项目调用。效果如下图

     

  • 相关阅读:
    C# 获得 当年1月1号
    Mybatis快速入门
    maven项目无法读取src/main/java目录下的配置文件解决方法
    Jenkins之手动安装
    Ubuntu17安装maven3.5.2
    Ubuntu17安装Jenkins
    Spring之事务操作(注解)
    Spring之事务操作(配置文件)
    Spring之配置文件中引入其它配置文件
    【转】maven常用插件介绍
  • 原文地址:https://www.cnblogs.com/dalgleish/p/12602709.html
Copyright © 2011-2022 走看看