2013-10-08 48 views
1

這裏有一些想法。我正在學習,所以可能會出現錯誤,甚至缺少一些基本知識。
基本數據類型的位數

  1. sizeof運算符返回字節數。
  2. number of bits in byte是不恆定的值(糾正我,但它是char的位數)。
  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-guaranteed-exactly-exactly-8-bit-in-c) – drahnr

+0

@drahnr它不是,它是完全不同的問題。我知道字符/字節可以有不同的大小。 – zubergu

回答

2

如果要檢查實際用於單個字符的機器多少位使用CHAR_BIT宏(注意:sizeof (char)總是會返回一個定義,雖然每個字符實際分配大小可能仍然較高(甚至32位)雖然浪費)


我不知道任何預定義宏,但

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

應該足夠

+0

我錯過了limits.h中的那一個。現在我檢查了我認爲這是CHAR_BIT。是否有單參數標準定義的宏/功能需要數據類型並返回比特數?(把它放在一個有更正的答案中,這是我可以接受的)。 – 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

3
const size_t numberOfBits = CHAR_BIT * sizeof(type); 
0

char數據類型是一個字節。 int是4字節(雙字)。短爲2字節(字)。那麼,有多少位? just sizeof(the_char)* 8。 當你想將字節轉換爲bits只是bits_number = bytes_number * 8 :)

+0

閱讀其他答案,找出你錯了什麼。 – zubergu

+0

我認爲字符總是8位。即使你是在64位系統下。我知道的是char是一個字節數據類型。 2「字符」或2個字節可以是一個短整數(2個字節,16位)等等。 – int3

+0

不可以。你還是錯的。 – zubergu