Quando i tipi non firmati sono stati introdotti per la prima volta nei linguaggi di programmazione?

0

Recentemente ho appreso che Fortran standard non supporta gli interi non firmati . Fortran è una lingua con una storia molto lunga. Suppongo che quando Fortran è stato progettato per la prima volta, semplicemente non c'era alcuna nozione di interi senza segno e non sono mai stati introdotti dopo.

Gli interi con segno sono precedenti agli interi senza segno?

Se sì, quando gli interi senza segno sono stati introdotti come tipo dedicato, direttamente accessibili nella pratica dei linguaggi di programmazione, e quando sono diventati diffusi?

Ho letto questa domanda sulla base logica per l'esistenza di interi senza segno , ma la cronologia non è vera indirizzato nelle risposte. La risposta di PieterB si avvicina di più a I microprocessori sono intrinsecamente non firmati. I numeri firmati sono la cosa che è stata implementata, non il contrario. . Ciò implica che la risposta alla prima parte della mia domanda sarebbe "No, non è così". ma tale risposta non è in realtà indicata lì.

    
posta gerrit 28.04.2017 - 12:00
fonte

1 risposta

7

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.

    
risposta data 28.04.2017 - 13:17
fonte

Leggi altre domande sui tag