int等 类型 在 64bit 和 32 bit 机器上 位长的确定
一直听说过 int ,float 等 基本数据类型 所占的 字节数 与操作系统 的位数有关,想 问下,如何 查找和 确定 自己所用环境 的int float是 按32bit 还是 64bit 来配置的呢?
听说limit.h 中 能看出来。 我的操作系统是64bit的,是不是 可以自己选择 让 int 按 64bit 环境来配置 还是32bit 环境来配置啊?
另外 limit.h 中有这么一段 代码,如何看啊? 谢谢大家啊
#define _I8_MIN (-127i8 - 1) /* minimum signed 8 bit value */
#define _I8_MAX 127i8 /* maximum signed 8 bit value */
#define _UI8_MAX 0xffui8 /* maximum unsigned 8 bit value */
#define _I16_MIN (-32767i16 - 1) /* minimum signed 16 bit value */
#define _I16_MAX 32767i16 /* maximum signed 16 bit value */
#define _UI16_MAX 0xffffui16 /* maximum unsigned 16 bit value */
#define _I32_MIN (-2147483647i32 - 1) /* minimum signed 32 bit value */
#define _I32_MAX 2147483647i32 /* maximum signed 32 bit value */
#define _UI32_MAX 0xffffffffui32 /* maximum unsigned 32 bit value */
/* minimum signed 64 bit value */
#define _I64_MIN (-9223372036854775807i64 - 1)
/* maximum signed 64 bit value */
#define _I64_MAX 9223372036854775807i64
/* maximum unsigned 64 bit value */
#define _UI64_MAX 0xffffffffffffffffui64
#if _INTEGRAL_MAX_BITS >= 128
/* minimum signed 128 bit value */
#define _I128_MIN (-170141183460469231731687303715884105727i128 - 1)
/* maximum signed 128 bit value */
#define _I128_MAX 170141183460469231731687303715884105727i128
/* maximum unsigned 128 bit value */
#define _UI128_MAX 0xffffffffffffffffffffffffffffffffui128
#endif
#ifndef SIZE_MAX
#ifdef _WIN64
#define SIZE_MAX _UI64_MAX
#else
#define SIZE_MAX UINT_MAX
#endif
#endi
另外 我用的是vs 字节长度与 编译器 有关吗?
[解决办法]
sizeof(int),sizeof(float)就可以了吧。
[解决办法]
limits.h+float.h
[解决办法]
这个是和编译器有关
只是有时候 编译器的行为和操作系统有关
[解决办法]
自定义类型呗
如果需要固定长度的类型
[解决办法]
#ifdef _WIN64
所以有_WIN64这样的宏,就是64位的配置,否则32位的。
这个宏可以配置的
------解决方案--------------------
楼主只用导入stdint.h,使用定义好的固定长度整数,如int32_t,uint8_t,而不用管编译器是32位还是64位.
[解决办法]
sizeof(ptrdiff_t)如果等于4就是32位平台,8代表64位平台,这在GCC和vs上都是通用的.
[解决办法]