sar*_*ara 17 c integer 16-bit stdint
我需要在C中声明一个16位大小的整数.
我知道short和int size是依赖于机器的.
我尝试使用,"stdint.h",
但似乎他们只是这样做
typedef short int16_t
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
我错过了什么,短型保证16位长度?
如果不是,是否有替代方案可以保证呢?
mae*_*ics 33
这意味着在您的机器上int16_t
定义,而不是所有机器.short
只需使用int16_t
绝对需要16位整数类型的地方; 它将在所有提供的平台上定义(适用于stdint.h
支持C99或cstdint
C++的所有平台).
[编辑]为了澄清," stdint.h
"头文件由C(或C++)编译器提供,因此其内容可能因编译器,版本,系统,CPU架构等而异.也就是说,编译器套件的作者知道究竟什么类型的系统具有什么尺寸.仅在一个系统上查看该文件只会告诉您特定体系结构上特定操作系统上特定版本的特定版本的定义(例如,Darwin x86_64上的GCC 4.2,WinNT Alpha上的Visual Studio或Solaris IA32上的ICC)等).某些系统(尤其是嵌入式系统)可能具有不同的类型大小,因此short
可能并不总是16位,并且编译器将知道用于该位长度的正确大小.
如果查看stdint.h
另一个系统上的文件,定义可能不同,或者它们可能相同 - 但其目的是为保证位长度的整数类型提供定义.
不,short
不不保证16位长.关于基本整数数据类型的唯一保证是:
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
sizeof(char) == 1
(注意:a char
仍可能超过8位!)SHRT_MIN <= -32767
和SHRT_MAX >= 32767
(暗示short
至少16位)INT_MIN <= -32767
和INT_MAX >= 32767
(暗示int
至少16位)LONG_MIN <= -2147483647
和LONG_MAX >= 2147483647
(暗示long
至少32位)LLONG_MIN <= -9223372036854775807
和LLONG_MAX >= 9223372036854775807
(暗示long long
至少为64位)(C99§5.2.4.2.1和附件E)
在你的机器上输入short
typedef 的事实只意味着你机器上的 16位.这并不意味着定义在其他人的机器上(或者甚至在同一台机器上的其他编译器上)也是相同的.int16_t
short
如果包含<stdint.h>
,它将int16_t
以某种方式定义,保证是有符号和16位宽的类型.如果需要精确大小的整数,请使用精确大小的类型.
归档时间: |
|
查看次数: |
67930 次 |
最近记录: |