Cus*_*dio 44 c int 32bit-64bit
我对C中Int变量的值范围感到困惑.
我知道32位unsigned int的范围是:0到65,535.这么久有0到4,294,967,295
这在32位机器上很好.但现在64位机器的所有东西保持不变?或者也许我的int容量不同?
我把这个问题理解为新手,但我真的很困惑.这种方法签名也没有帮助.:)
unsigned long long int atomicAdd(unsigned long long int* address, unsigned long long int val);
Joh*_*itb 69
在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
现在,在特定实现中,您有各种位范围.在维基百科的文章介绍了这个好听.
T.E*_*.D. 19
不,int在C中没有定义为32位.int并且long根本没有定义为任何特定大小.语言唯一保证的是sizeof(char)<=sizeof(short)<=sizeof(long).
理论上编译器可以使short,char和long所有相同的比特数.我知道有些人确实为所有这些类型保存了char.
这就是为什么C现在定义类似uint16_t和的类型uint32_t.如果您需要特定尺寸,则应该使用其中一种尺寸.
Ely*_*Ely 18
来自K&R的摘录:
short通常是16位,long32位和int16位或32位.每个编译器都可以自由选择适合自己硬件的大小,只受shorts和ints至少为16位,longs至少为32位short且不超过的限制int,不超过long.
您可以使用limits.h包含decimal/float类型限制的定义:
#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
| 归档时间: | 
 | 
| 查看次数: | 295926 次 | 
| 最近记录: |