这里有几个想法。我正在学习,所以可能会有错误甚至遗漏一些基础知识。
sizeof
运算符返回字节数。number of bits in byte
不是常量值(纠正我,但它的位数有多少)。所以我提出了这段(可能是不必要的)代码:
#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
宏/功能可以为我做这件事吗?
具有更好数学背景的人可以检查我的代码是否总是给出正确的答案。
答案 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 :)