这与以下问题有关,
在大多数平台上,有几个人提到int总是32位.如果这是真的,我很好奇.
你知道任何具有不同大小的int的现代平台吗?忽略具有8位或16位架构的恐龙平台.
注意: 我已经知道如何从另一个问题声明一个32位整数.这个更像是一个调查,以找出哪些平台(CPU/OS /编译器)支持其他大小的整数.
Dav*_*dge 42
正如几个人所说的,不能保证'int'将是32位,如果你想使用特定大小的变量,特别是在编写涉及位操作的代码时,你应该使用'标准整数类型'强制按照c99规范.
int8_t
uint8_t
int32_t
uint32_t
Run Code Online (Sandbox Code Playgroud)
等等...
它们通常的形式为[u] intN_t,其中'u'指定您需要无符号数量,N是位数
在你正在编译的平台上,stdint.h中应该提供正确的typedef,使用这些可以编写漂亮的可移植代码:-)
pax*_*blo 17
" 在大多数平台上总是 32位" - 这个片段有什么问题?:-)
C标准没有规定许多整体类型的大小.例如,它确实要求相对大小,sizeof(int) >= sizeof(short)等等.它还规定了最小范围,但允许多种编码方案(两个补码,一个补码和符号/幅度).
如果你想要一个特定大小的变量,你需要使用一个适合你正在运行的平台的变量,例如使用#ifdef's,如:
#ifdef LONG_IS_32BITS
typedef long int32;
#else
#ifdef INT_IS_32BITS
typedef int int32;
#else
#error No 32-bit data type available
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
或者,C99及更高版本允许精确的宽度整数类型intN_t和uintN_t:
typedef名称intN_t表示带有宽度一符号整数型N,无填充比特,和一个二的补码表示法.因此,int8_t表示具有正好8位宽度的有符号整数类型.typedef名称uintN_t表示具有宽度的无符号整数类型N.因此,uint24_t表示宽度恰好为24位的无符号整数类型.typedef名称.目前,大多数桌面和服务器平台都使用32位整数,甚至许多嵌入式平台(比如手持式ARM或x86)都使用32位int.要想达到16位,int你必须确实变得非常小:想想"Berkeley mote"或者一些较小的Atmel Atmega芯片.但他们在那里.
| 归档时间: |
|
| 查看次数: |
27091 次 |
| 最近记录: |