c - C 编程中的长整数范围
问题描述
根据链接https://www.geeksforgeeks.org/data-types-in-c/2
如果我们假设long int
需要 8 个字节(64 位),那么它的范围应该是 -2^63 到 2^63-1 ,但是上面的链接中没有给出。为什么会这样?
同样unsigned long int
应该在 0 到 2^64 之间。
请告诉 的范围是什么float
,因为它没有在链接double
中long double
提到。
解决方案
我宁愿不使用 geeksforgeeks 作为知识的来源。此页面上有更多“不精确”的信息
C 标准定义了整数类型的最小范围
— number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT 8
— minimum value for an object of type signed char
SCHAR_MIN -127 // −(2 7 − 1)
— maximum value for an object of type signed char
SCHAR_MAX +127 // 2 7 − 1
— maximum value for an object of type unsigned char
UCHAR_MAX 255 // 2 8 − 1
— minimum value for an object of type char
CHAR_MIN see below
— maximum value for an object of type char
CHAR_MAX see below
— maximum number of bytes in a multibyte character, for any supported locale
MB_LEN_MAX 1
— minimum value for an object of type short int
SHRT_MIN -32767 // −(2 15 − 1)
— maximum value for an object of type short int
SHRT_MAX +32767 // 2 15 − 1
— maximum value for an object of type unsigned short int
USHRT_MAX 65535 // 2 16 − 1
— minimum value for an object of type int
INT_MIN -32767 // −(2 15 − 1)
— maximum value for an object of type int
INT_MAX +32767 // 2 15 − 1
— maximum value for an object of type unsigned int
UINT_MAX 65535 // 2 16 − 1
— minimum value for an object of type long int
LONG_MIN -2147483647 // −(2 31 − 1)
— maximum value for an object of type long int
LONG_MAX +2147483647 // 2 31 − 1
— maximum value for an object of type unsigned long int
ULONG_MAX 4294967295 // 2 32 − 1
22 Environment §5.2.4.2.1
WG14/N1256 Committee Draft — Septermber 7, 2007 ISO/IEC 9899:TC3
— minimum value for an object of type long long int
LLONG_MIN -9223372036854775807 // −(2 63 − 1)
— maximum value for an object of type long long int
LLONG_MAX +9223372036854775807 // 2 63 − 1
— maximum value for an object of type unsigned long long int
ULLONG_MAX 18446744073709551615 // 2 64 − 1
所以整数不是最小 32 位而是 16 位。可以在limits.h
定义中检查实际大小(这来自 C 标准):
#define CHAR_BIT 8
#define CHAR_MAX UCHAR_MAX or SCHAR_MAX
#define CHAR_MIN 0 or SCHAR_MIN
#define INT_MAX +32767
#define INT_MIN -32767
#define LONG_MAX +2147483647
#define LONG_MIN -2147483647
#define LLONG_MAX +9223372036854775807
#define LLONG_MIN -9223372036854775807
#define MB_LEN_MAX 1
#define SCHAR_MAX +127
#define SCHAR_MIN -127
#define SHRT_MAX +32767
#define SHRT_MIN -32767
#define UCHAR_MAX 255
#define USHRT_MAX 65535
#define UINT_MAX 65535
#define ULONG_MAX 4294967295
#define ULLONG_MAX 18446744073709551615
C 标准还设置了浮点类型的最小范围 - 但您需要检查.h
文件以获取实现值。
#define DBL_DIG 10
#define DBL_MANT_DIG
#define DBL_MAX_10_EXP +37
#define DBL_MAX_EXP
#define DBL_MIN_10_EXP -37
#define DBL_MIN_EXP
#define DECIMAL_DIG 10
#define FLT_DIG 6
#define FLT_MANT_DIG
#define FLT_MAX_10_EXP +37
#define FLT_MAX_EXP
#define FLT_MIN_10_EXP -37
#define FLT_MIN_EXP
#define FLT_RADIX 2
#define LDBL_DIG 10
#define LDBL_MANT_DIG
#define LDBL_MAX_10_EXP +37
#define LDBL_MAX_EXP
#define LDBL_MIN_10_EXP -37
#define LDBL_MIN_EXP
以下列表中给出的值应由实现定义的常量表达式替换,其值大于或等于所示值:
#define DBL_MAX 1E+37
#define FLT_MAX 1E+37
#define LDBL_MAX 1E+37
以下列表中给出的值应由实现定义的常量表达式替换,其(正)值小于或等于所示值:
#define DBL_EPSILON 1E-9
#define DBL_MIN 1E-37
#define FLT_EPSILON 1E-5
#define FLT_MIN 1E-37
#define LDBL_EPSILON 1E-9
#define LDBL_MIN 1E-37
推荐阅读
- android-11 - 如何在 Android 11 中访问(r+w)/sdcard/Android/data 文件夹
- python - 创建 Python 函数以迭代 List/DataFrame (VIF)
- java - 无法在 localhost 中运行 google app engine java 项目如何修复 java.util.logging.config.file 错误
- c# - 找不到 node.js 二进制文件
- windows - curl -xget 在 powershell 5.1 中出现错误
- amazon-web-services - AWS Api Gateway:缺少身份验证令牌错误
- python - 从数组堆栈中选择随机数组
- excel - 使用applescript在整个excel文件中查找隐藏的行和列
- visual-studio - Github 扩展未检测到 Visual Studio 2019
- python - 运行 API 请求时出现此错误 ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:777)