1

这里有一些想法。我正在学习,所以可能会出现错误,甚至会遗漏一些基础知识。

  1. sizeof运算符返回字节数。
  2. number of bits in byte不是恒定值(纠正我,但它是 char 的位数)。
  3. 我想知道变量占用了多少位,如果不对 char 中的位数做出假设,sizeof 不会告诉我这一点。

所以我想出了这段(可能是不必要的)代码:

#include <stdio.h>
#include <math.h>
#include <limits.h>

int main(void)
{
  double bits;

  bits=sizeof(int)*log10(UCHAR_MAX+1)/log10(2);

  printf("Bits = %lf\n", bits);

  return 0;
}

是否有更简单(标准)的方法来检查bits给定类型占用了多少?
CHAR_BIT * sizeof(type)会做这项工作,但有没有标准的one argument宏/功能可以为我做这件事?
具有更好数学背景的人可以检查我的代码是否总是给出正确的答案。

4

4 回答 4

3
const size_t numberOfBits = CHAR_BIT * sizeof(type);
于 2013-10-08T10:13:18.043 回答
2

如果您想检查机器实际用于单个字符的位数,请使用CHAR_BIT宏(请注意,sizeof (char)尽管每个字符的实际分配大小可能仍然更高(甚至是 32 位),但根据定义总是返回一个,尽管很浪费)


我不知道任何预定义的宏,但是

#define REAL_BITS(type) (CHAR_BIT*sizeof(type))

应该足够了

于 2013-10-08T09:57:42.293 回答
1

使用 CHAR_BIT(在 limits.h 中定义)应该可以做到。

CHAR_BIT * sizeof(something)

我检查了许多 *nix 平台,它们都是一个字节的 8 位,但我想它可能在一些陌生平台上有所不同。

于 2013-10-08T09:53:27.830 回答
0

char 数据类型是一个字节。一个 int 是 4 个字节(双字)。short 是 2 个字节(字)。那么,有多少位?只是 sizeof(the_char)*8。当您想将字节转换为位时,只需 bits_number=bytes_number*8 :)

于 2013-10-08T10:21:54.913 回答