2014-03-13 38 views
0

在訪談中的一個。有人問我想在字符數據類型中存儲999值。怎麼做。如何在字符數據類型中存儲999值

999 = 1111100111(在二進制表示)

字符的類型是1字節的。 8位。

int main() 
{ 
int a =999; 
signed char c = 999; 
printf("%d %d",a,c); 
} 

當我編譯的程序中,我得到的警告,

storeintinchar.c:6:1: warning: overflow in implicit constant conversion [-Woverflow]

當我運行它:

a=999. c=-25;

當我改變characterunsigned char c=999;

,當我編譯程序我得到警告的

storeintinchar.c:6:1: warning: large integer implicitly truncated to unsigned type [-Woverflow]

當我運行它。

a=999. c=231;

  1. 我們可以存儲在字符999價值在於它能夠以任何方式做到這一點。
  2. 面試官試圖測試什麼?
  3. 是否可以在wchar_t中存儲999值。當我在GNU C Library中搜索上面的問題時,wchar_t始終是32位寬。然後我們可以使用它。是否有效

    int main() { int a = 999; unsigned char c = 999; wchar_t d = 999; 012fprintf(「%d%d%d」,a,c,d);

    }

    輸出:999 231 999

    wchar_t的是4個字節。我能夠存儲999值。

    我感謝所有的人提供快速結果和給出合理的答案的計算器的一部分。

+3

簡短而唯一的答案是:你不能。 'char'通常是一個字節,8位,不能存儲該範圍以外的值。但是可以使用按位運算將它存儲在* two *'char'變量中。 –

+0

其實你已經在你的問題中回答了你自己的問題。面試官可能想測試你的基本計算技能。 –

+0

您不能在字符中存儲999,但可以在wchar中存儲。就像邁克爾說的那樣,這是對一般計算知識的測試。 – user3386109

回答

0

你不行。數據類型(在您可能遇到的每個平臺上)有8位,因此可以編碼最多256個值。假設你需要所有的值高達999,這比它可以編碼更多。作爲char簽名,它只存儲-128和+127之間的值。

然而,如果你只需要編碼值一些直至幷包括999,你可以使用一個查找表。

或者,您可以使用(例如,)2 char值,夾在一起做成一個16位整數,可以存儲無符號數字,最多可以存儲65535.

+0

是的查找表是一個可能的解決方案,但我想他想要存儲* char *中的值,如問題中所述 –

1

如果編譯器有合適的字節大小,理論上可以將999存儲在一個字節中。檢查limits.h您當前的char類型的大小。但是,對於每個體系結構和每個編譯器,當然你不能期望這樣大小的char。通常對於現代體系結構,一個字符是8位,並且不能在那裏存儲這麼大的數字,而不需要使用任何額外的存儲器。

1

你可以存儲999(還有一些其他的數字),但是你需要實現一種「壓縮」數字的算法,其結果是char的位不代表他們通常的意思,但是拿着一鍵解決方案...該算法是這樣的:

bit idx:  7 6 5 4 3 2 1 0 
bit value: 0 0 0 0 0 1 1 1 

所以,這是999你做:

999 = bit[0] * 9 * (10^0) + // 1 * 9 + 
     bit[1] * 9 * (10^1) + // 1 * 90 + 
     bit[2] * 9 * (10^2) + // 1 * 900 
     bit[3] * 9 * (10^3) + // 0 * 9000 .... 
     .... 
0

要存儲值999 char數據,您需要將其分解並將其存儲在2個或更多個char中秒。例如(使用每個char的7位):

char first = 999 % 128 
char second = 999/128 

還要注意,有可能爲一個char表示任何值。例如,可以說1的值表示999,然後只存儲1.這與存儲的值不同。

相關問題