2016-06-01 99 views
-1

因爲我很困惑它將存儲在它裏面。它是ascii值或'z',因爲一些網站說它存儲ascii和一些說它的商店'z'。 鏈接說,答案是「Z」:http://cprogrammingworld4u.blogspot.in/2011/07/chapter-1-getting-started.html什麼char ch ='Z'會存儲在ch?

鏈接說答案是ASCII:https://www.careercup.com/question?id=12511679

+1

在C你真的不z'和z'的'ASCII值之間的區別'。它們都是內存中完全相同的對象的有效文字。 –

+2

這是一回事。 ''z''只是'z'字符值的語法。如果您想知道該值是什麼,只需將其打印爲整數。 –

+0

因此它將ascii值存儲在內存位置 –

回答

10

在C,'z'int型與價值122一個常數(假設你是一個ASCII的機器,其上你可能是)。你們兩位的消息都是一致的 - 他們是一樣的。

作爲一個例子,只需要打印所有你關心的不同方式。示例程序:

#include <stdio.h> 

int main(void) 
{ 
    char ch = 'z'; 
    char i = 122; 
    printf("%c %d\n", ch, ch); 
    printf("%c %d\n", i, i); 
    return 0; 
} 

運行:

$ make example && ./example 
z 122 
z 122 
+0

是否改變爲** java **是否與c相同 –

+1

它是[類似於Java](http://stackoverflow.com/questions/13849986/character-literal-in-java),是的。 –

+0

所以你說的答案是ascii和'z'或者什麼 –

0

答案是...一舉兩得!這裏是一個片段,它可以幫助你更好地理解:

#include <stdio.h> 

int main(void) { 
    char ch = 'z'; 
    printf("%c\n", ch); 
    printf("%d\n", (int)ch); 
} 

當你考慮CH爲一個char,這的確是「Z」,存儲。但是,如果將其轉換爲int,則將獲得'z'的ASCII值,即122。

希望這會對您有所幫助。

+1

對'int'的強制轉換是多餘的:'printf'是一個可變參數函數,這意味着'char'在傳遞時自動提升爲'int'。 –

+0

這個答案是正確的,但有點誤導。 '(int)'強制轉換不是必需的,因爲默認的參數促銷並沒有發生任何實際的「轉換」。 –

+0

但在內存中,它只改變存儲'z'或其ascii值..explicity我們改變 –

0

它「通常」存儲ASCII值。

因此可以對字符執行整數運算。 ASCII值用於將其映射到正確的ASCII字符。你甚至可以增加或減少它。

#include <stdio.h> 

int main(void) 
{ 

char ch = 90; 
printf("%c\n\n", ch); 
ch = 64; 
for (int i = 0; i < 26; i++) 
{ 
    ch++; 
    printf("%c\n", ch); 
} 

} 

for循環打印出A-Z.注意我在每次迭代中只增加了1的值。

如果您發現我已經分配了一個數字。我甚至可以把它分配給'z'。

從完整的初學者角度來看,你必須明白的是,所有內容都被存儲爲'0'或'1'。這個不可讀的0和1的序列轉換成您在屏幕上看到的文本(解碼)。

+1

要非常迂腐,它將該字符的值存儲在執行指令集中,該指令集通常是ASCII,但不是*有*。例如,您的程序將在EBCDIC機器上打印一些廢話。 –

+0

@CarlNorum我會進行必要的更正:) –

0

'Z'我們是一個字符常量。它的類型是int。當您使用

char c = 'Z'; 

存儲在c整數值可以根據你的編譯器使用的字符編碼是不同的。如果它使用ASCII編碼,那麼它將在c中存儲'Z'的ASCII表示,即十進制的90。如果它使用EBCDIC編碼,那麼它會將'Z'的EBCDIC表示存儲在c中,即233十進制。

爲了編寫可移植程序,您必須忽略存儲在c中的整數值。有些事情你可以依靠這兩個編碼是:

  1. '9' - '0'等於9

  2. 'Z' - 'A'等於'z' - 'a'

我不知道在使用其他編碼的上述情況並非如此。

參考文獻:
ASCII encoding chart
EBCDIC encoding chart

+1

2和3 *不*保證。只要看看你鏈接到的EBCDIC圖表。 –

+1

@CarlNorum的確如此。謝謝你讓我知道。 –

+1

您的新#2有保證嗎?我認爲唯一的保證是數字是連續的。 –

相關問題