從陣列所需的輸出我有一個數組:未接收用C
int arr[]={'1','2','4','8','16','32','64','128'};
我正與這行調用它:
a=arr[a];
然而,我沒有得到所期望的輸出。輸入與預期的一樣(我已經檢查過,它從0-7),但輸出依據輸入而變爲49,50,52,56,49,51,54,49
。我做錯了什麼?
編輯:引號表示ASCII。知道我錯過了簡單的事情。
從陣列所需的輸出我有一個數組:未接收用C
int arr[]={'1','2','4','8','16','32','64','128'};
我正與這行調用它:
a=arr[a];
然而,我沒有得到所期望的輸出。輸入與預期的一樣(我已經檢查過,它從0-7),但輸出依據輸入而變爲49,50,52,56,49,51,54,49
。我做錯了什麼?
編輯:引號表示ASCII。知道我錯過了簡單的事情。
陣列中的初始值設定爲字符文字,不int
值,以便該陣列將與每個字符文字(多字節字符文字的數值來填充,如'32'
,被允許的,但被限定其值的實現,見How to determine the result of assigning multi-character char constant to a char variable? )。
以獲得所需的輸出使用int
文字:
int arr[]={1,2,4,8,16,32,64,128};
輸出是正確的。例如,49是字符'1'
的ASCII值,這是數組中第一個條目的ASCII值。
Gah,ascii,知道這是簡單的事情。謝謝! – 2013-03-18 15:32:42
在此聲明int arr[]={'1','2','4','8','16','32','64','128'};
中,您正在存儲ascii值,因爲您聲明它們是字符串。因此,的49
爲1
的值,50
爲2
,52
爲4
,56
爲8
,49
爲16
1
,51
用於32
3
,54
用於64
6
和49
用於128
1
,其被檢索時索引到數組中。
int arr[]={'1','2','4','8','16','32','64','128'};
你應該聲明你arr
數組作爲char
而不是int
。
獲取數字而不是字符的確切原因是您使用的輸出庫被稱爲int
參數。從這一點上,圖書館理解你給它的數據應該被解釋和顯示爲數字。
此外,您得到的數字是ASCII或數組等效值。
這是真的在8051嗎?! – 2013-03-18 15:31:31
爲什麼不用'(1 << a)'代替? (除了明顯的數組初始化錯誤已經包含在答案中) – 2013-03-18 15:31:47
你的數組應該是'const'。此外,啓用(moar!)編譯器警告,因爲「16」是一個多字符字符,它很少有用,因此傾向於生成警告。 – unwind 2013-03-18 15:35:01