Це не так.
Термінальний рядок - це байт, що містить усі 0 біт.
Непідписаний int - це два або чотири байти (залежно від вашого оточення), кожен з яких містить усі 0 біт.
Два елементи зберігаються за різними адресами. Скомпільований код виконує операції, придатні для рядків на колишньому місці розташування, і операції, придатні для непідписаних двійкових чисел на другому. (Якщо у вас немає або помилки у вашому коді, чи якогось небезпечно розумного коду!)
Але всі ці байти виглядають однаково на процесорі. Дані в пам'яті (у більшості поширених на даний момент архітектурних наборів інструкцій) не мають асоційованого типу. Це абстракція, яка існує лише у вихідному коді і означає щось лише для компілятора.
Правка додана: Як приклад: Цілком можливо, навіть звичайно, виконувати арифметику на байтах, що складають рядок. Якщо у вас є рядок з 8-бітових символів ASCII, ви можете перетворити літери в рядку між верхнім і малим регістром, додаючи або віднімаючи 32 (десятковий). Або якщо ви перекладаєте на інший символьний код, ви можете використовувати їх значення як індекси в масив, елементи якого забезпечують еквівалентне бітове кодування в іншому коді.
Для процесора символи дійсно є надзвичайно короткими цілими числами. (вісім біт кожен замість 16, 32 або 64.) Для нас, люди, їх значення, можливо, асоціюються з читабельними символами, але процесор цього поняття не має. Він також нічого не знає про умову "С" "нульовий байт закінчує рядок" (і як багато хто зазначав в інших відповідях і коментарях, існують середовища програмування, в яких ця конвенція взагалі не використовується) .
Напевно, в x86 / x64 є деякі інструкції, які, як правило, використовуються багато з рядками - наприклад, префікс REP - але ви також можете добре використовувати їх у масиві цілих чисел, якщо вони досягнуть бажаного результату.