2014-06-26 19 views
5

biryere Bunun örneklerini gördük:Bir int basamakına '0' ekleme niçin char'a dönüştürebilir?

int i = 2; 
char c = i + '0'; 
string s; 
s += char(i + '0'); 

Ancak, henüz sıfır dönüşüm sağlar ekleyerek neden bir açıklama görmedik. c bir char olan

+0

'nedir Char (i '0' +); C++ 'da mı? (* Bu gerçek bir soru. *) – this

+0

@Bu üst kodlayıcıda derleme yapar:/ – sgarza62

+2

@ Bu, "0" ile eklenen bir tamsayıdır. C tarzı bir dökümle aynı işlevi gören işlevsel stilli bir döküm. – chris

cevap

6

ASCII tablosuna bakarsanız, asciitable, rakamların 48'de başladığını ('0') ve 57'ye ('9' için) geçtiğini görürsünüz. Yani bir rakam için karakter kodunu almak için, bu rakamı '0' karakter koduna ekleyebilirsiniz.

1

(char)(i+c) size (ASCII c değeri) + i eşit bir ASCII değer ile yeni bir char verir. 0-9 arasındaki basamakların ascii değerleri ardışık olduğundan, , i uygun aralığa sahip olduğu sürece i'a karşılık gelen karı verir. Jarod42'nin belirttiği gibi, bir int, . Doğruluğu korumak için bir döküm eklendi.

2

ASCII değerlerine dayanmaktadır. 48 olan ASCII değerinin eklenmesi, 48 + 5'in 53 veya ASCII 53'ün 5, yani

Google ASCII olduğu ve iyi bir grafik bulup çalışacağı anlamına gelir. Her char (karakter) için değerlere baktığınızda mantıklı olmalıdır.

3

'0''un tamsayı değeri 48'dur.

'0' + 1 = 49 = '1' 
'0' + 2 = 50 = '2' 

... 

'0' + 9 = 57 = '9' 

Yani, sadece kendisine '0' ekleyin karşılık gelen karakteri için bir basamak dönüştürmek istedi. Burada tabloya bakın (bu durumda STX kullanılarak) ASCII belirteci karşılık gelecek bir char dönüştürüldüğünde bu haliyle

3

i: numarasına '0' ekleyerek http://www.asciitable.com/

etkili o doğru ASCII değerini yapıyoruz .

Tabii ki, bu kodla ilgili bir konuya tam olarak dokundunuz, ki bu 'un ne olduğu açıkça belli değil. c

itoa(i); 

veya daha iyi sopa ++: Eğer c-stili kullanmak istiyorsanız Böyle bir şey yapmanın yerine düşünmelisiniz

std::stringstream ss; 
ss << i; 
ss.str(); //for strings 
ss.str().c_str(); // for c-style strings. 
İlgili konular