是否可以聲明一個非常大的數字的位域,例如位長大於長的?
struct binfield{
uber_int field : 991735910442856976773698036458045320070701875088740942522886681;
}wordlist;
只是爲了澄清,我不是試圖代表在256bit的這個數字,這就是我想要多少位使用。或者,也許在我的電腦中沒有那麼多位?
是否可以聲明一個非常大的數字的位域,例如位長大於長的?
struct binfield{
uber_int field : 991735910442856976773698036458045320070701875088740942522886681;
}wordlist;
只是爲了澄清,我不是試圖代表在256bit的這個數字,這就是我想要多少位使用。或者,也許在我的電腦中沒有那麼多位?
C不支持任意大小的數字數據類型。您只能使用編譯器提供的整數大小,並且如果希望代碼具有便攜性,則最好遵守標準化類型char
(8位),short
(16位)和long
(32位)和long long
(64位)。
但是你可以做的是創建一個char[]
。字符總是至少8位(並且不超過8位,除非在某些非常奇特的平臺上)。因此,您可以使用一個char數組來存儲儘可能多的位值,因爲您可以負擔得起內存。但是,如果要將char數組用作位域,則需要一些樣板代碼才能訪問正確的字節。
例如,爲了獲得一個字符數組的位n
的值,使用
bitfield[n/8] >> n%8 & 0x1
有一些歷史平臺,其中'char'不是* 8位,並且規範沒有說'char'必須是8位。然而,無論'char'中的位數是多少,'sizeof(char)'總會給你'1'。 –
要添加到@ JoachimPileborg的評論,並在您關心非8位'char'的小概率時:C標準說'char'將始終爲至少8位,並且char中的位數'在'CHAR_BIT'宏中提供(來自'limits.h')。 POSIX確實指出'CHAR_BIT'正好是8。 –
字符技術似乎是正確的方式去實現它,雖然我意識到存儲可能會有一段時間,直到摩爾定律趕上 – veta
有沒有一起在地球上的所有計算機,許多位。 – interjay
@interjay世界上所有的計算機沒有超過256位? – Philipp
@ Philipp世界上所有的計算機都沒有991735910442856976773698036458045320070701875088740942522886681位。 – interjay