您的位置:首页 > 编程语言 > C语言/C++

c++的整型

2018-03-11 22:36 99 查看
c++有五种整型类型,char、short、int、long、long long,每种都有signed(有符号,默认)、unsigned(无符号)两种分类,一共为10种类型

在c++的实现中,每一种类型在不同系统上使用的存储位数(宽度)是不同的,其规则为:

short至少16位

int至少与short一样长

long至少32位,且至少与int一样长

long long至少64位,且至少与long一样长

不得不说是个蛋疼的规则

c++实现将类型的相关数据都存储在了limits.h头文件中,下面是win10系统中vs2017的实现:

#define CHAR_BIT      8         // number of bits in a char
#define SCHAR_MIN   (-128)      // minimum signed char value
#define SCHAR_MAX     127       // maximum signed char value
#define UCHAR_MAX     0xff      // maximum unsigned char value

#ifndef _CHAR_UNSIGNED
#define CHAR_MIN    SCHAR_MIN   // mimimum char value
#define CHAR_MAX    SCHAR_MAX   // maximum char value
#else
#define CHAR_MIN    0
#define CHAR_MAX    UCHAR_MAX
#endif

#define MB_LEN_MAX    5             // max. # bytes in multibyte char
#define SHRT_MIN    (-32768)        // minimum (signed) short value
#define SHRT_MAX      32767         // maximum (signed) short value
#define USHRT_MAX     0xffff        // maximum unsigned short value
#define INT_MIN     (-2147483647 - 1) // minimum (signed) int value
#define INT_MAX       2147483647    // maximum (signed) int value
#define UINT_MAX      0xffffffff    // maximum unsigned int value
#define LONG_MIN    (-2147483647L - 1) // minimum (signed) long value
#define LONG_MAX      2147483647L   // maximum (signed) long value
#define ULONG_MAX     0xffffffffUL  // maximum unsigned long value
#define LLONG_MAX     9223372036854775807i64       // maximum signed long long int value
#define LLONG_MIN   (-9223372036854775807i64 - 1)  // minimum signed long long int value
#define ULLONG_MAX    0xffffffffffffffffui64       // maximum unsigned long long int value


long long:

#include "iostream"
#include "climits"
int main()
{
std::cout << "signed long long类型的宽度为:" << sizeof (signed long long) << std::endl;
std::cout << "unsigned long long类型的宽度为:" << sizeof (unsigned long long) << std::endl;
std::cout << "signed long long类型的最大值为:" << LLONG_MAX << std::endl;
std::cout << "signed long long类型的最小值为:" << LLONG_MIN<<std::endl;
std::cout << "unsigned long long类型的最大值为:" << ULLONG_MAX<<std::endl;
return 0;
}
输出:

signed long long类型的宽度为:8
unsigned long long类型的宽度为:8
signed long long类型的最大值为:9223372036854775807
signed long long类型的最小值为:-9223372036854775808
unsigned long long类型的最大值为:18446744073709551615
可以看到long long类型由8个字节存储,严格来说宽度为64位,无符号类型的最大值就是2的64次方减1

long:

#include "iostream"
#include "climits"
int main()
{
std::cout << "signed long类型的宽度为:" << sizeof (signed long) << std::endl;
std::cout << "unsigned long类型的宽度为:" << sizeof (unsigned long) << std::endl;
std::cout << "signed long类型的最大值为:" << LONG_MAX << std::endl;
std::cout << "signed long类型的最小值为:" << LONG_MIN<<std::endl;
std::cout << "unsigned long类型的最大值为:" << ULONG_MAX<<std::endl;
return 0;
}
输出:

signed long类型的宽度为:4
unsigned long类型的宽度为:4
signed long类型的最大值为:2147483647
signed long类型的最小值为:-2147483648
unsigned long类型的最大值为:4294967295
可以看到long使用4个字节存储,即32位数字

int:

#include "iostream"
#include "climits"
int main()
{
std::cout << "signed int类型的宽度为:" << sizeof (signed int) << std::endl;
std::cout << "unsigned int类型的宽度为:" << sizeof (unsigned int) << std::endl;
std::cout << "signed int类型的最大值为:" << INT_MAX << std::endl;
std::cout << "signed int类型的最小值为:" << INT_MIN<<std::endl;
std::cout << "unsigned int类型的最大值为:" << UINT_MAX<<std::endl;
return 0;
}
输出:

signed int类型的宽度为:4
unsigned int类型的宽度为:4
signed int类型的最大值为:2147483647
signed int类型的最小值为:-2147483648
unsigned int类型的最大值为:4294967295
在win10中long与int类型都是存储为4个字
a1ae


short:

#include "iostream"
#include "climits"
short main()
{
std::cout << "signed short类型的宽度为:" << sizeof (signed short) << std::endl;
std::cout << "unsigned short类型的宽度为:" << sizeof (unsigned short) << std::endl;
std::cout << "signed short类型的最大值为:" << SHRT_MAX << std::endl;
std::cout << "signed short类型的最小值为:" << SHRT_MIN<<std::endl;
std::cout << "unsigned short类型的最大值为:" << USHRT_MAX<<std::endl;
return 0;
}
输出:

signed short类型的宽度为:2
unsigned short类型的宽度为:2
signed short类型的最大值为:32767
signed short类型的最小值为:-32768
unsigned short类型的最大值为:65535
short类型使用2字节存储,即16个二进制位

char类型比较特殊,默认的char是有符号还是无符号类型完全取决于实现,所以

#define CHAR_BIT      8         // number of bits in a char
#define SCHAR_MIN   (-128)      // minimum signed char value
#define SCHAR_MAX     127       // maximum signed char value
#define UCHAR_MAX     0xff      // maximum unsigned char value

#ifndef _CHAR_UNSIGNED
#define CHAR_MIN    SCHAR_MIN   // mimimum char value
#define CHAR_MAX    SCHAR_MAX   // maximum char value
#else
#define CHAR_MIN    0
#define CHAR_MAX    UCHAR_MAX
#endif
这里将CHAR、SCHAR、UCHAR分为三类来定义常量,其中无符号char(UCHAR)、有符号char(SCHAR)的范围都是固定的,而char的范围要根据_CHAR_UNSIGNED常量来决定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: