C++ c++;长整型和整型一样吗?
我刚刚开始学习如何编码(就像3天前一样),我有一些问题。。。首先,我的“int”、“long int”和“unsigned int”看起来都是相同的大小C++ c++;长整型和整型一样吗?,c++,eclipse,mingw,C++,Eclipse,Mingw,我刚刚开始学习如何编码(就像3天前一样),我有一些问题。。。首先,我的“int”、“long int”和“unsigned int”看起来都是相同的大小 #include <iostream> #include <limits.h> using namespace std; int main() { int value = 2147483647; cout << value << endl; cout <<
#include <iostream>
#include <limits.h>
using namespace std;
int main() {
int value = 2147483647;
cout << value << endl;
cout << "Max int value: "<< INT_MAX << endl;
cout << "Min int value: "<< INT_MIN << endl;
long lvalue = 568534534;
cout << lvalue << endl;
short svalue = 22344;
cout << svalue << endl;
cout << "Size of int " << sizeof(int) << endl;
cout << "Size of short int: " << sizeof(short) << endl;
cout << "Size of long int: " << sizeof(long) << endl;
cout << "Size of unsigned int: " << sizeof(unsigned int) << endl;
unsigned int uvalue = 5345554;
cout << uvalue << endl;
return 0;
}
如你所见。长,无符号int=int
这不是我唯一的问题。对于“长双精度”,无论数字有多大,它都会输出负数。
代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float fvalue = 123.456789;
cout << sizeof(float) << endl;
cout << setprecision(20) << fixed << fvalue << endl;
double dvalue = 234.5554;
cout << setprecision(20) << fixed << dvalue << endl;
long double lvalue = 123.4;
cout << setprecision(20) << fixed << lvalue << endl;
return 0;
}
(顺便说一句,删除了大部分零)
所以,正如你所看到的,有些东西有问题。
我使用eclipse作为我的空闲和
我使用MinGW32
虽然我在一个64位系统,我尝试安装明文-W64为我的系统,但无法找到如何…< P>对于基本积分类型(如<代码> int <代码>,<代码>长INT/COD>,<代码>未签名< /COD>,<代码>未签名短,<代码>未签名长< /代码>)C++标准明确要求每种类型可以代表什么值,不是这个尺寸。注意:这不适用于从99和C++中(从2011)引入到C中的“固定宽度”类型。
实际上,int
必须能够(至少)支持-32767
到32767
范围内的所有值。对short int
(又称short
)的要求相同。对长整数的要求相当于支持范围-2147483647
到2147483647
的要求
然而,重要的是,这些是最低要求——所有此类类型都允许支持更大范围的值。但是,这些类型的大小是由实现定义的
实际上,假设采用二进制表示,int
和short
的要求转化为需要16
位或更多,包括符号位,它等于两个8
-位字节,对于long
,要求转化为32
位或更多,或四个8
位字节
请注意,大多数现代编译器使用二进制表示(因为现代目标体系结构是数字的)。然而,C++标准实际上并不要求这一点——它只需规定所需的范围(如这里的情况,对于积分类型)或行为限制。p>
但是,允许每种积分类型表示更大范围的值(即,超过标准规定的最低要求),因此没有任何东西可以阻止实现(编译器)使用short
,即16
位,即int
即32
位,以及一个long
,它也是32位。自然地,依赖这些值的代码不能保证与其他实现一起工作——例如,具有16位短、16位-int和32位长的实现
对于无符号
类型也可以进行同样的讨论,只是范围不同。然而,实际上,无符号短
可以使用16
位或更多来表示,无符号整数
也可以使用16
位或更多来表示,无符号长
可以使用32
位或更多来表示
至于您关于longdouble
的问题,一些免费提供的实现在对longdouble
的支持中存在缺陷,导致了您描述的输出。例如,在内存中,gnu编译器的一些MingW端口版本很可能随Eclipse一起提供。检查编译器是否有更新
<强>边注:我曾见过基本类型的类型(如:代码> int ,长INT/C++ >,<代码>未签名 ,<代码>未签名短,<代码>未签名长< /COD> >的关系,C++标准阐明了每个类型可以代表什么值,而不是大小的要求。注意:这不适用于从99和C++中(从2011)引入到C中的“固定宽度”类型。
实际上,
int
必须能够(至少)支持-32767
到32767
范围内的所有值。对short int
(又称short
)的要求相同。对长整数的要求相当于支持范围-2147483647
到2147483647
的要求
然而,重要的是,这些是最低要求——所有此类类型都允许支持更大范围的值。但是,这些类型的大小是由实现定义的
实际上,假设采用二进制表示,int
和short
的要求转化为需要16
位或更多,包括符号位,它等于两个8
-位字节,对于long
,要求转化为32
位或更多,或四个8
位字节
请注意,大多数现代编译器使用二进制表示(因为现代目标体系结构是数字的)。然而,C++标准实际上并不要求这一点——它只需规定所需的范围(如这里的情况,对于积分类型)或行为限制。p>
但是,允许每种积分类型表示更大范围的值(即,超过标准规定的最低要求),因此没有任何东西可以阻止实现(编译器)使用short
,即16
位,即int
即32
位,以及一个long
,它也是32位。自然地,依赖这些值的代码不能保证与其他实现一起工作——例如,具有16位短、16位-int和32位长的实现
对于无符号
类型也可以进行同样的讨论,只是范围不同。然而,实际上,a
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float fvalue = 123.456789;
cout << sizeof(float) << endl;
cout << setprecision(20) << fixed << fvalue << endl;
double dvalue = 234.5554;
cout << setprecision(20) << fixed << dvalue << endl;
long double lvalue = 123.4;
cout << setprecision(20) << fixed << lvalue << endl;
return 0;
}
4
123.45678710937500000000
234.55539999999999000000
-18137553330312606000000000000000000000000000000000000