Nie ma
Terminator łańcucha jest bajtem zawierającym wszystkie 0 bitów.
Bez znaku int ma dwa lub cztery bajty (w zależności od środowiska), z których każdy zawiera wszystkie 0 bitów.
Te dwa elementy są przechowywane pod różnymi adresami. Skompilowany kod wykonuje operacje odpowiednie dla łańcuchów w pierwszej lokalizacji, a operacje odpowiednie dla niepodpisanych liczb binarnych w drugiej. (Chyba że masz błąd w kodzie lub niebezpiecznie sprytny kod!)
Ale wszystkie te bajty wyglądają tak samo dla procesora. Dane w pamięci (w najbardziej popularnych obecnie architekturach zestawów instrukcji) nie są z nimi powiązane. To abstrakcja, która istnieje tylko w kodzie źródłowym i oznacza coś tylko dla kompilatora.
Dodane do edycji: Na przykład: arytmetyka bajtów tworzących ciąg znaków jest nawet całkiem powszechna. Jeśli masz ciąg 8-bitowych znaków ASCII, możesz przekonwertować litery w łańcuchu między dużymi i małymi literami, dodając lub odejmując 32 (dziesiętnie). Lub jeśli tłumaczysz na inny kod znakowy, możesz użyć ich wartości jako indeksów w tablicy, której elementy zapewniają równoważne kodowanie bitów w innym kodzie.
Dla procesora znaki są bardzo krótkimi liczbami całkowitymi. (osiem bitów zamiast 16, 32 lub 64.) Dla nas ludzi ich wartości są powiązane z czytelnymi znakami, ale CPU nie ma o tym pojęcia. Nie wie też nic o konwencji „C” „bajt zerowy kończy ciąg znaków” (i jak wielu zauważyło w innych odpowiedziach i komentarzach, istnieją środowiska programistyczne, w których ta konwencja w ogóle nie jest używana) .
Dla pewności, istnieją pewne instrukcje w x86 / x64, które zwykle są często używane z łańcuchami - na przykład przedrostek REP - ale równie dobrze możesz ich użyć na tablicy liczb całkowitych, jeśli osiągną pożądany wynik.