Z ciekawośći o różnicę pomiędzy, np. string x="1"; a int x=1;

0

No właśnie, pytam bardziej z ciekawości, bo tak często muszę używać różnych konwersji typów, że zaciekawiło mnie jaka jest to różnica dla komputera

Potoczniej mówiąc string to łańcuch znaków, a int to liczba/cyfra. Wobec tego jeżeli zmienna typu string zawiera liczbę/cyfrę, to dla czego komputer nie rozumie jej jako int (odpowiedź "bo jest stringiem" mi nic nie mówi)

Jeżeli znak != cyfra, to czym się różnią?

Trochę męcę, ale chyba niektórzy zrozumieli moje pytanie :)

Swoją drogą to przedstawia problem rozwoju, np. kalkulator i pierwiastek - otóż są ludzie nie wiedzący, że pierwiastek to tak naprawdę podniesienie do potęgi 1/2, że x^1/4 to pierwiastek czwartego stopnia, etc. W programowaniu była by to, np. różnica między poziomami języków programowania

2

std::string to de facto składa się z ciągu znaków, więc będę o nich mówić. Znak (char) to w C/C++ nic innego jak liczba i tak też jest przez kompilator traktowana. Więc co się tak naprawdę dzieje, jeżeli np. funkcja printf otrzyma jako parametr "abc"? Dostanie ciąg liczb (a dokładniej wskaźnik na taki ciąg liczb w pamięci komputera), kolejno 97, 98 i 99. Te liczby są już niżej przez jakieś części systemu operacyjnego przypisywane konkretnym grafikom liter w odpowiednim foncie. Więc czym jest np. "123"? To zgodnie z ASCII ciąg liczb 49, 50 i 51. I tym właśnie różni się '1' (już znak, a nie wskaźnik do niego) od 1. Pierwsze to liczba 49, a drugie to liczba 1.

1

Bo różne typy danych mają różną reprezentację. Znaki zapisujesz np. za pomocą ASCII, liczby za pomocą ZU2 a liczby zmiennoprzecinkowe zgodnie ze standardem IEE754 itd.

W kodzie binarnym 1 będące typu int może wyglądać tak: 00000000000000000000000000000001 (32 bity)
Za to reprezentacja znaku 1 w kodzie ASCII (przechowywanym w typie char) to: 00110001 (8 bitów)

Dla Ciebie to 1. Ale to jest 1 innego typu.

0

Hah, dzięki, idealne wytłumaczenie :)

Jesteście genialni :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1