Non
Il terminatore di stringa è un byte contenente tutti gli 0 bit.
L'int senza segno è di due o quattro byte (a seconda del proprio ambiente) ciascuno contenente tutti 0 bit.
I due articoli sono memorizzati a indirizzi diversi. Il codice compilato esegue operazioni adatte a stringhe nella prima posizione e operazioni adatte a numeri binari senza segno su quest'ultima. (A meno che tu non abbia un bug nel tuo codice o un codice pericolosamente intelligente!)
Ma tutti questi byte sembrano uguali per la CPU. I dati in memoria (nella maggior parte delle architetture di set di istruzioni attualmente comuni) non hanno alcun tipo associato ad esso. Questa è un'astrazione che esiste solo nel codice sorgente e significa qualcosa solo per il compilatore.
Modifica aggiunta: Ad esempio: è perfettamente possibile, anche comune, eseguire l'aritmetica sui byte che compongono una stringa. Se si dispone di una stringa di caratteri ASCII a 8 bit, è possibile convertire le lettere nella stringa tra maiuscole e minuscole aggiungendo o sottraendo 32 (decimale). Oppure, se stai traducendo in un altro codice di caratteri, puoi usare i loro valori come indici in un array i cui elementi forniscono la codifica di bit equivalente nell'altro codice.
Per la CPU i caratteri sono numeri interi estremamente brevi. (otto bit ciascuno invece di 16, 32 o 64.) A noi umani i loro valori sono associati a caratteri leggibili, ma la CPU non ne ha idea. Inoltre, non sa nulla della convenzione "C" di "byte null termina una stringa", (e come molti hanno notato in altre risposte e commenti, ci sono ambienti di programmazione in cui quella convenzione non è affatto utilizzata) .
A dire il vero, ci sono alcune istruzioni in x86 / x64 che tendono ad essere usate molto con le stringhe - il prefisso REP, ad esempio - ma puoi anche usarle su una matrice di numeri interi, se raggiungono il risultato desiderato.