Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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/4/c/62.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++ 为什么long int和int在我的计算机中具有相同的最大值_C++_C_Size - Fatal编程技术网

C++ 为什么long int和int在我的计算机中具有相同的最大值

C++ 为什么long int和int在我的计算机中具有相同的最大值,c++,c,size,C++,C,Size,我正在学习C编程语言,在玩一些代码时,我偶然发现了一些东西。我认为int有4个字节,因此最大值为+2147483647(问题是长int)。但是当我用GCC编译器在我的计算机上测试时,结果是不同的。我用long int尝试了同样的方法,它给出了相同的最大大小。你能向我解释一下这种行为吗?其他问题没有帮助我理解根本原因。让我再举几个例子,看看发生了什么 代码示例: #include <stdio.h> #include <limits.h> int main(void){

我正在学习C编程语言,在玩一些代码时,我偶然发现了一些东西。我认为int有4个字节,因此最大值为+2147483647(问题是长int)。但是当我用GCC编译器在我的计算机上测试时,结果是不同的。我用long int尝试了同样的方法,它给出了相同的最大大小。你能向我解释一下这种行为吗?其他问题没有帮助我理解根本原因。让我再举几个例子,看看发生了什么

代码示例:

#include <stdio.h>
#include <limits.h>
int main(void){

    int a = 1, i;

    printf("int limit: %d\n", INT_MAX);
    printf("long int limit: %li\n", LONG_MAX);
    for (i = 0; i < 10; i++){
        a *= 10;
        printf("A: %d\n", a); // To see when a is corrupted.
    }




    return 0;
}
#包括
#包括
内部主(空){
int a=1,i;
printf(“整数限制:%d\n”,整数最大值);
printf(“长整数限制:%li\n”,长\u最大值);
对于(i=0;i<10;i++){
a*=10;
printf(“A:%d\n,A);//查看A何时损坏。
}
返回0;
}

您正在使用%d将它们都打印出来,这就是造成这种误解的原因

> C++标准保证int大于或大于短和长大于或大于int等。 有关所有详细信息,请参见或标准本身。 在32位机器上,32位通常是int的大小。在64位机器上,int可能是32位或64位,具体取决于操作系统和其他情况。
另外,正如其他人所指出的,您打印变量可能会截断它。

首先-4字节如何变成32767?@Rockybilly请不要图片!因为你连一点解决问题的努力都没有。你不应该张贴文字的图片。“复制/粘贴”有什么问题?我确实尝试自己解决这个问题,然后想在这里寻求帮助。或者你已经习惯于对人苛刻,或者你只是喜欢这样?这是一个简单的问题,可能是因为一个简单的误解或我忽略了什么,只是需要一些关于我找不到的东西的指导,我得到了-4票。@Olaf I
char
被定义为至少8位(char\u位要求至少为8位)。来自维基百科:字节是“一组二进制数字或位(通常为8位)作为一个单元进行操作。”但它在哪里说字节的大小必须是8位?我研究的TMS320的C编译器使用了32位字符。。。所有内存访问均为32位宽
sizeof(int)==sizeof(char)
。有人可能会说它的字节是32位。是的,我是在开玩笑。我用%ld和%li尝试了第二个printf函数,但得到了相同的结果。可能是我错过的另一件事吗?看看不,那不是引起误解的原因。使用
%d
打印
long
值有未定义的行为,但在OP的系统上
int
long
具有相同的表示形式,因此很可能会起作用。@Keith Thompson我知道。这就是为什么我暗示OP应该阅读实际标准的原因。@Keith Thompson我很清楚它也保证最小尺寸,但这与OP的问题并不完全相关。我的问题只是一个简单的困惑,因为我想我看了ANSI的max_int值。主要问题是我的长int和具有相同字节的int(
sizeof()
)。这分散了我对字节有八位这一事实的注意力。我应该删除这个问题。@Keith Thompson修正了让我们整理一下这些评论。