6502 имел только указатель инструкций в виде 16-битного регистра, 16-битные целые числа обрабатывались 8-битными с несколькими операторами, например. если сделать в 16 бит c = a + b
clc ; clear carry bit
lda A_lo ; lower byte of A into accumulator
adc B_lo ; add lower byte of B to accumulator, put carry to carry bit
sta C_lo ; store the result to lower byte of C
lda A_hi ; higher byte of A into accumulator
adc B_hi ; add higher byte of B using carry bit
sta C_hi ; store the result to higher byte of C
Процессоры 8080 и Z80 в то время также имели 16-битные регистры.
Процессор Z80 по-прежнему имел 8-битную архитектуру. Его 16-битные регистры в конечном итоге объединяли два 8-битных регистра, например BC, DE. Операции с ними были намного медленнее, чем с 8-битными регистрами, потому что архитектура процессора была 8-битной, но таким образом обеспечивались 16-битные регистры и 16 операций.
Архитектура 8088 была смешанной, потому что у нее тоже была 8-битная шина данных, но у нее были 16-битные регистры, AX, BX и т. д., младшие и старшие байты, также отдельно используемые как 8-битные регистры, AL, AH и т. д.
Таким образом, были разные решения для использования 16-битных целых чисел, но 8-битное целое число просто бесполезно. Вот почему C и C++ также использовали 16 бит для int.
person
quantummind
schedule
17.11.2016
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
, поэтомуint
никогда не может быть меньшеshort
, даже если естественный размер был бы другим. C++ гарантирует, чтоshort
составляет не менее 16 бит. Не уверен, что C дает такую же гарантию. - person Remy Lebeau   schedule 17.11.2016SHRT_MAX
иINT_MAX
должны быть не менее32767
- person Danh   schedule 17.11.2016