基本数据类型中的位数

时间:2013-10-08 09:47:53

标签: c byte sizeof bit

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

  1. sizeof运算符返回字节数。
  2. number of bits in byte不是常量值(纠正我,但它的位数有多少)。
  3. 我想知道变量占用的位数有多少,而且sizeof不会告诉我没有假设char中的位数。
  4. 所以我提出了这段(可能是不必要的)代码:

    #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 个答案:

答案 0 :(得分:3)

const size_t numberOfBits = CHAR_BIT * sizeof(type);

答案 1 :(得分:2)

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


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

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

应该足够了

答案 2 :(得分:1)

使用CHAR_BIT(在limits.h中定义)应该这样做。

CHAR_BIT * sizeof(something)

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

答案 3 :(得分:0)

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