首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本数据类型中的位数

基本数据类型中的位数
EN

Stack Overflow用户
提问于 2013-10-08 09:47:53
回答 4查看 995关注 0票数 1

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

  1. sizeof运算符返回字节数。

  1. number of bits in byte不是常量值(更正我,但它是char拥有的位数)。

  1. 我想知道变量占用了多少位,如果不对char中的位数做假设,大号就不会告诉我这一点。

因此,我想出了一段(可能是不必要的)代码:

代码语言:javascript
复制
#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宏/函数为我做这件事?

有较好数学背景的人可以检查我的代码是否总是给出正确的答案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-08 09:57:42

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

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

代码语言:javascript
复制
#define REAL_BITS(type) (CHAR_BIT*sizeof(type))

应该就够了

票数 2
EN

Stack Overflow用户

发布于 2013-10-08 10:13:18

代码语言:javascript
复制
const size_t numberOfBits = CHAR_BIT * sizeof(type);
票数 3
EN

Stack Overflow用户

发布于 2013-10-08 09:53:27

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

代码语言:javascript
复制
CHAR_BIT * sizeof(something)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19244371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档