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

如何解决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,295。 0到65535将是16位无符号。 无符号long long(在64位实现中,也可能是ulong和uint)的范围(至少)为0到18,446,744,073,709,551,615(264-1)。从理论上讲,它可能会更大,但至少到目前为止,这种情况不存在。     ,        最好包括
stdlib.h
。由于没有stdlibg,它需要很长时间     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?