Secondo Wikipedia , il concetto di numeri firmati è apparso durante la dinastia Han in Cina (~ 200 aC ~ 200 D.C.), e non è stato accettato in Occidente fino al 17 ° secolo.
Anche se può sembrare un commento snello, non lo è: intende sottolineare il fatto che i numeri sono intrinsecamente legati al dominio in cui vengono utilizzati. La matematica occidentale era basata sul conteggio e sulla geometria (e, dopo aver preso una lezione di livello universitario sulla matematica greca, posso dirvi che è davvero notevole ciò che possono ottenere 27 lettere, una scala e una bussola).
Allo stesso modo, i numeri utilizzati dai linguaggi del computer sono legati al dominio in cui vengono utilizzati. Fortran è stato sviluppato per l'analisi numerica; Cobol, il suo contemporaneo, è stato progettato per la matematica aziendale. Entrambi questi domini richiedono numeri firmati e hanno un uso limitato per i numeri non firmati. Lisp era l'altro "grande" linguaggio di alto livello degli anni '50; Non ho idea di quale sia la versione originale utilizzata per i numeri.
I numeri non firmati sono generalmente appropriati solo al dominio del controllo macchina, in cui si accede a ogni bit della parola macchina e non si desiderano comportamenti come l'estensione del segno. Tuttavia, la programmazione a livello macchina non utilizzava linguaggi "di livello superiore", a causa della paura dei programmatori dei compilatori. Ciò è cambiato con C, e forse in altri linguaggi, e quelle lingue hanno introdotto tipi interi senza segno.
Questo ci porta ai linguaggi macchina, che rappresentano le operazioni di base della macchina. E qui le cose si fanno un po 'strane, perché i numeri firmati sono semplicemente un modo di guardare i bit .
Il circuito di adder non conosce nulla dei segni: prende semplicemente due bit come input e produce due bit come produzione. Incatenando un gruppo di adders, puoi prendere due parole come input e produrre una parola + carry bit come output. Se aggiungi 0x7FFF e 0x0003 su un'architettura a 16 bit, ottieni 0x8002. Come interpreti questo dipende da te: forse hai aggiunto due numeri positivi e hai ottenuto un altro numero positivo, forse hai avuto un overflow a un numero negativo.
Tutto ciò sta dicendo che la domanda stessa non è valida. Firmato contro non firmato è semplicemente un modo specifico per il dominio di guardare gli stessi bit.