C Int和Long 32-64位中的值的范围。

| 我对C中Int变量的值范围感到困惑。 我知道32位无符号整数的范围是:0到65,535。 这么久有0到4,294,967,295 这在32bits机器中很好。但是现在在64位计算机中,所有事物都保持不变吗? 也许我的int能力不同? 我将这个问题理解为新手,但我真的很困惑。 此方法签名也无济于事。 :)
unsigned long long int atomicAdd(unsigned long long int* address, unsigned long long int val);
    
已邀请:
        在C和C ++中,您具有这些最低要求(即,实际实现的幅度可能更大)
signed char: -2^07+1 to +2^07-1
short:       -2^15+1 to +2^15-1
int:         -2^15+1 to +2^15-1
long:        -2^31+1 to +2^31-1
long long:   -2^63+1 to +2^63-1
现在,在特定的实现上,您可以使用各种位范围。维基百科文章对此进行了很好的描述。     
        不,C中的“ 2”未定义为32位。
int
long
完全没有定义为任何特定大小。语言唯一保证的是
sizeof(char)<=sizeof(short)<=sizeof(long)
。 从理论上讲,编译器可以使
short
char
long
的位数相同。我知道有些人实际上为所有这些类型节省了7英镑。 这就是为什么C现在定义诸如
uint16_t
uint32_t
之类的类型的原因。如果需要特定大小,则应使用其中一种。     
        摘录自K&R:   “ 6”通常是16位,“ 4”是32位,“ 2”通常是16位或   32位。每个编译器可以自由选择适合自己的大小   硬件,仅受
short
s和
int
s的限制   至少16位,
long
至少32位,
short
否   大于
int
,不大于which4ѭ。 您可以使用
limits.h
,其中包含十进制/浮点类型的限制的定义:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>


int main(int argc, char** argv) {

    printf(\"CHAR_BIT    :   %d\\n\", CHAR_BIT);
    printf(\"CHAR_MAX    :   %d\\n\", CHAR_MAX);
    printf(\"CHAR_MIN    :   %d\\n\", CHAR_MIN);
    printf(\"INT_MAX     :   %d\\n\", INT_MAX);
    printf(\"INT_MIN     :   %d\\n\", INT_MIN);
    printf(\"LONG_MAX    :   %ld\\n\", (long) LONG_MAX);
    printf(\"LONG_MIN    :   %ld\\n\", (long) LONG_MIN);
    printf(\"SCHAR_MAX   :   %d\\n\", SCHAR_MAX);
    printf(\"SCHAR_MIN   :   %d\\n\", SCHAR_MIN);
    printf(\"SHRT_MAX    :   %d\\n\", SHRT_MAX);
    printf(\"SHRT_MIN    :   %d\\n\", SHRT_MIN);
    printf(\"UCHAR_MAX   :   %d\\n\", UCHAR_MAX);
    printf(\"UINT_MAX    :   %u\\n\", (unsigned int) UINT_MAX);
    printf(\"ULONG_MAX   :   %lu\\n\", (unsigned long) ULONG_MAX);
    printf(\"USHRT_MAX   :   %d\\n\", (unsigned short) USHRT_MAX);
    printf(\"FLT_MAX     :   %g\\n\", (float) FLT_MAX);
    printf(\"FLT_MIN     :   %g\\n\", (float) FLT_MIN);
    printf(\"-FLT_MAX    :   %g\\n\", (float) -FLT_MAX);
    printf(\"-FLT_MIN    :   %g\\n\", (float) -FLT_MIN);
    printf(\"DBL_MAX     :   %g\\n\", (double) DBL_MAX);
    printf(\"DBL_MIN     :   %g\\n\", (double) DBL_MIN);
    printf(\"-DBL_MAX     :  %g\\n\", (double) -DBL_MAX);

    return (EXIT_SUCCESS);
}
也许您可能需要在计算机上进行一些调整,但这是一个很好的模板,可以让您开始了解(实现定义的)最小和最大值。     
        没有答案。该标准定义了最小范围。一个int必须至少能够容纳65535。但是,大多数现代编译器都允许int为32位值。此外,没有什么可以阻止多种类型具有相同的容量(例如int和long)。 话虽如此,该标准确实在您的特定情况下说:
0 → +18446744073709551615
作为unsigned long long int的范围。 进一步阅读:http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size     
        实际上,大多数现代处理器(ARM,Intel / AMD,Alpha,SPARC,Itanium和PowerPC)上的unsigned int范围为0到2 ^ 32-1,即4,294,967,295 = 0xffffffff 因为int(有符号和无符号)的长度为32位,最大的长度如前所述。 (无符号short的最大值为2 ^ 16-1 = 65,535) (unsigned)long long int将具有64位的长度(在大多数情况下,long int就足够了 64位Linux等,但该标准承诺将long long int设置为64位)。 因此,它们的范围为0到2 ^ 64-1 = 18446744073709551615     
        在C和C ++内存中需要一些变量:
signed char: -2^07 to +2^07-1
  
short:       -2^15 to +2^15-1
  
int:         -2^15 to +2^15-1
  
long:        -2^31 to +2^31-1
  
long long:   -2^63 to +2^63-1
signed char: -2^07 to +2^07-1
  
short:       -2^15 to +2^15-1
  
int:         -2^31 to +2^31-1
  
long:        -2^31 to +2^31-1
  
long long:   -2^63 to +2^63-1
取决于编译器和硬件体系结构 C语言的国际标准仅要求short变量的大小应小于或等于int类型的大小,而int类型的大小又应小于或等于long类型的大小。     
        看一下limits.h。您可以找到编译器的特定值。 INT_MIN和INT_MAX将很有趣。     
        查看系统中的
limits.h
文件,它将告诉系统特定限制。或检查
man limits.h
并转到“数值限制”部分。     
        一个32位无符号int的范围是0到4,294,967,295。 0到65535将是16位无符号。 无符号long long(在64位实现中,也可能是ulong和uint)的范围(至少)为0到18,446,744,073,709,551,615(264-1)。从理论上讲,它可能会更大,但至少到目前为止,这种情况不存在。     
        最好包括
stdlib.h
。由于没有stdlibg,它需要很长时间     

要回复问题请先登录注册