编辑:愚蠢的问题,我忽略了格式标识符。
我有一个程序获取一些无符号类型的大小及其最大值。这引起了我的注意,甚至认为unsigned long long
是 8 个字节的事实,它的范围似乎固定为 4 个字节的范围。(char 是保证的 8 位字节)
我理解的问题unsigned long long
仅由标准定义为至少足够大以容纳int
(或者更确切地说 >= long int
>=可int
传递)。但是,为什么它使用 8 个字节的内存,而不是像int
它也被限制在 4 个字节的范围一样大小?
unsigned char: 255 1*sizeof(char)
unsigned short: 65535 2*sizeof(char)
unsigned short int: 65535 2*sizeof(char)
unsigned int: 4294967295 4*sizeof(char)
unsigned long int: 4294967295 4*sizeof(char)
unsigned long long int: 4294967295 8*sizeof(char) //range[0..18446744073709551615]
unsigned long: 4294967295 4*sizeof(char)
unsigned long long: 4294967295 8*sizeof(char) //range[0..18446744073709551615]
这是我使用的来源:
#include <iostream>
#include <cstdio>
int main(void){
std::cout << "Type sizes: (multiples of char)"<< std::endl << "char: " << sizeof(char) << std::endl <<\
"short: " << sizeof() << std::endl <<\
"short int: " << sizeof(short int) << std::endl << std::endl <<\
"int: " << sizeof(int) << std::endl <<\
"long int: " << sizeof(long int) << std::endl <<\
"long long int: " << sizeof(long long int) << std::endl << std::endl <<\
"long: " << sizeof(long) << std::endl <<\
"long long: " << sizeof(long long) << std::endl << std::endl <<\
"float: " << sizeof(float) << std::endl <<\
"double: " << sizeof(double) << std::endl;
unsigned char c = -1;
unsigned short s1 = -1;
unsigned short int s2 = -1;
unsigned int i = -1;
unsigned long int i1 = -1;
unsigned long long int i2 = -1;
unsigned long l = -1;
unsigned long long l1 = -1;
printf("\
\nUnsigned Max: \n\
\nchar: %u\
\nshort: %u\
\nshort int: %u\
\nint: %u\
\nlong int: %u\
\nlong long int: %u\
\nlong: %u\
\nlong long: %u\
", c, s1, s2, i, i1, i2, l, l1);
return 0;
}