我正在寻找有关基本C++类型大小的详细信息.我知道这取决于架构(16位,32位,64位)和编译器.
但是有没有C++的标准?
我在32位架构上使用Visual Studio 2008.这是我得到的:
char : 1 byte
short : 2 bytes
int : 4 bytes
long : 4 bytes
float : 4 bytes
double: 8 bytes
Run Code Online (Sandbox Code Playgroud)
我试图找到,但没有成功,可靠的信息,表述的大小char,short,int,long,double,float(和其他类型的我没想到的),在不同的体系结构和编译器.
C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
是否有标准投诉方法来表示ANSI(C89/90)C中的字节?我知道,大多数情况下,一个字符恰好是一个字节,但我的理解是,这不能保证是这种情况.另外,在C99标准中有stdint.h,但在C99之前使用了什么?
我特别想知道8位和"字节"(sizeof(x)== 1).
检查给定整数是否为负的一种方法可能是:( 使用位操作)
int num_bits = sizeof(int) * 8; //assuming 8 bits per byte!
int sign_bit = given_int & (1 << (num_bits-1)); //sign_bit is either 1 or 0
if ( sign_bit )
{
cout << "given integer is negative"<<endl;
}
else
{
cout << "given integer is positive"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
该解决方案的问题是每字节的比特数不能是8,它可以是每个字节9,10,11甚至16或40比特.字节不一定意味着8位!无论如何,这个问题可以通过写作轻松解决,
//CHAR_BIT is defined in limits.h
int num_bits = sizeof(int) * CHAR_BIT; //no assumption.
Run Code Online (Sandbox Code Playgroud)
现在好像很好.但它真的吗?这个标准符合吗?如果负整数不表示为2的补码怎么办?如果它是代表一个二进制记数系统,不必要只负整数有1个在它的最显著位?
我们可以编写既可移植又符合标准的代码?
相关主题:
原始数据类型的大小
为什么布尔1字节而不是1位大小?
我还没有在大端处理器上进行过测试,但是这总是给我一个最不重要的字节?
int i = 12345678;
unsigned char c = static_cast<unsigned char>(i);
Run Code Online (Sandbox Code Playgroud)