2013-10-08 3 views
1

Вот несколько мыслей. Я изучаю, что могут быть ошибки и даже недостающие некоторые основы.
Число бит в базовом типе данных

  1. sizeof Оператор возвращает количество байтов.
  2. number of bits in byte не является постоянной величиной (исправьте меня, но это число бит имеет знак).
  3. Я хочу знать, сколько бит занимает переменная, и sizeof не скажет мне, что без предположений о количестве бит в char.

Так что я пришел с этим куском (возможно ненужными) Код:

#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 макрос/функция, которая делает это для меня?
Кто-то с лучшим математическим фоном может проверить, будет ли мой код всегда давать правильные ответы.

+1

Возможный дубликат [Является ли символ гарантированностью ровно 8 бит в C?] (Http://stackoverflow.com/questions/ 881894/is-char-гарантировано-быть-точно-8-бит-long-in-c) – drahnr

+0

@ drahnr это не так, это совершенно другой вопрос. Я знаю, как char/byte могут иметь разный размер. – zubergu

ответ

2

Если вы хотите проверить, сколько бит машина фактически использовала для одного символа, используйте макрос CHAR_BIT (обратите внимание, что sizeof (char) всегда будет возвращать один по определению, хотя фактический размер распределения на символ может быть еще выше (даже 32 бита) хотя расточительно)


Я не знаю ни одного предопределенного макроса, но

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

должно хватить

+0

Я пропустил это из пределов. H.Теперь, когда я проверил, я думаю, что это CHAR_BIT. Является ли единственный аргумент стандартным макросом/fuction, который принимает тип данных и возвращает количество бит? (Поместите это в ответ с исправлением, и это будет то, что я могу принять). – zubergu

1

Использование CHAR_BIT (определено в limits.h) должно быть выполнено.

CHAR_BIT * sizeof(something) 

Я проверил ряд * NIX платформ, и они все 8 бит в байте, но я предполагаю, что это может варьироваться в зависимости от некоторых странных платформ.

+0

Я не думаю, что это так, как стандарт определяет байт. – zubergu

+0

Вы правы, вы можете использовать CHAR_BIT (определенный в limits.h), но это 8 бит на всех платформах, которые я проверил. – Daniel

+0

И я искал ответ, всегда верный на C, не делая предположений. CHAR_BIT - это то, что мне не хватало, но я не могу принять этот ответ из-за 8-разрядной байтовой части. – zubergu

0

тип данных char - это байт. int - 4 байта (dword). короткий - 2 байта (слово). так, сколько бит? только размерof (the_char) * 8. , когда вы хотите преобразовать байты в биты только bits_number = bytes_number * 8 :)

+0

Прочитайте другие ответы, чтобы узнать, почему вы ошибаетесь. – zubergu

+0

Я думаю, что char будет всегда 8 бит. даже вы находитесь под 64-битной системой. Я знаю, что char - это тип данных байтов. 2 «символа» или 2 байта могут быть коротким целым числом (2 байта, 16 бит) и т. Д. ... – int3

+0

Нет. Ты по-прежнему неправ. – zubergu

Смежные вопросы