相关疑难解决方法(0)

C++标准规定了int的大小,long类型是什么?

我正在寻找有关基本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++-faq

679
推荐指数
15
解决办法
120万
查看次数

508
推荐指数
8
解决办法
5万
查看次数

用于表示ANSI(C89/90)C中的字节的类型?

是否有标准投诉方法来表示ANSI(C89/90)C中的字节?我知道,大多数情况下,一个字符恰好是一个字节,但我的理解是,这不能保证是这种情况.另外,在C99标准中有stdint.h,但在C99之前使用了什么?

我特别想知道8位和"字节"(sizeof(x)== 1).

c types c89

33
推荐指数
2
解决办法
2万
查看次数

C:长长总是64位?

如果我在我的代码中使用long longs,那么无论运行什么代码的机器,我是否绝对100%保证它们将具有64位?

c

7
推荐指数
1
解决办法
9396
查看次数

使用位操作检测负整数

检查给定整数是否为负的一种方法可能是:( 使用位操作)

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位大小?

c c++ binary

5
推荐指数
1
解决办法
1810
查看次数

获得最不重要的字节

我还没有在大端处理器上进行过测试,但是这总是给我一个最不重要的字节?

int i = 12345678;
unsigned char c = static_cast<unsigned char>(i);
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
2294
查看次数