ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C标准规定了int的大小,long类型是什么?

2019-09-11 00:10:48  阅读:239  来源: 互联网

标签:c c-faq


我正在寻找有关基本C类型大小的详细信息.
我知道这取决于架构(16位,32位,64位)和编译器.

但C有什么标准吗?

我在32位架构上使用Visual Studio 2008.这是我得到的:

char  : 1 byte
short : 2 bytes
int   : 4 bytes
long  : 4 bytes
float : 4 bytes
double: 8 bytes

我试图在不同的架构和编译器下找到可靠的信息,说明char,short,int,long,double,float(以及我没想到的其他类型)的大小.

解决方法:

C标准没有以字节为单位指定整数类型的大小,但它指定了它们必须能够容纳的最小范围.您可以从所需范围推断出最小位数.你可以从中推断最小大小(以字节为单位)和defines the number of bits in a byte的CHAR_BIT宏的值(除了最简陋的平台以外,它都是8,并且它不能小于8).

char的另一个约束是它的大小总是1个字节,或CHAR_BIT位(因此名称).

最小范围required by the standard(第22页)是:

和数据类型范围MSDN

>签名字符:-127到127(注意,不是-128到127;这适用于1的补码和符号和大小的平台)
> unsigned char:0到255
>“plain”char:与signed char或unsigned char相同的范围,implementation-defined
>签名简称:-32767至32767
> unsigned short:0到65535
> signed int:-32767到32767
> unsigned int:0到65535
>签署长:-2147483647至2147483647
> unsigned long:0到4294967295
>长签:-9223372036854775807至9223372036854775807
> unsigned long long:0到18446744073709551615

C(或C)实现可以将字节sizeof(type)的类型大小定义为任何值,只要

>表达式sizeof(type)* CHAR_BIT的计算结果是足够高的位数以包含所需的范围,并且
>类型的排序仍然有效(例如sizeof(int)< = sizeof(long)).
实际的特定于实现的范围可以在< limits.h>中找到. C中的标题,或< climits>在C中(或者甚至更好,在< limits>标题中模板化的std :: numeric_limits).

例如,这是你将如何找到int的最大范围:

C:

#include <limits.h>
const int min_int = INT_MIN;
const int max_int = INT_MAX;

C :

#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();

标签:c,c-faq
来源: https://codeday.me/bug/20190910/1802393.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有