Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;长整型和整型一样吗?_C++_Eclipse_Mingw - Fatal编程技术网

C++ c++;长整型和整型一样吗?

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 <<

我刚刚开始学习如何编码(就像3天前一样),我有一些问题。。。首先,我的“int”、“long int”和“unsigned int”看起来都是相同的大小

#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