2017-02-21 23 views
1

Скажите, что я сравниваю int и короткий int. Согласно второму изданию «Язык программирования C», написанный на стр. 173, короткий int будет преобразован в int, который составляет 4 байта вместо коротких целых 2 байта в моей системе.C - Как выполняется арифметическое преобразование на уровне памяти?

Мой вопрос: Как это сделать на уровне памяти? Будет ли короткое целое число добавлено к нему 2 байта или данные будут скопированы в совершенно другую ячейку памяти?

Я только что отредактировал из сравнения double и int в short и int. Извините за неудобства.

+0

поплавков кодируются совершенно иначе, чем целые. Даже если вы переводили между целым типом и типом с плавающей точкой одного и того же размера, результирующая с плавающей запятой будет состоять из разных бит. Это не простая побитовая операция. – Kevin

+0

Вы не должны думать об этом с точки зрения представления, а с точки зрения стоимости. Если значение 'int' вписывается в допустимый диапазон типа' double', все в порядке. Если это не так, у вас проблемы. –

+1

его реализация определена. некоторые машины делают load-load-convert-compare, load-convert-compare, load-convert-save-compare, some do load-load-compare .... load double> load int> int double> double-double compair может быть наиболее часто используется в настоящее время, поскольку FPU являются в основном загрузкой и регистрацией регистров. – user3528438

ответ

1

В большинстве случаев (без каких-либо неясных микроконтроллеров) памяти вообще не потребуется. Все будет сделано на уровне регистра. Даже если обрабатываемый тип не может храниться в одном регистре, он будет разделен на несколько регистров и обработан соответствующим образом.

0

Сравнение такого типа обычно происходит между аппаратными регистрами в ЦП. Ваше значение памяти будет загружено в регистр с преобразованием, имеющим место при загрузке.

вы получите последовательность что-то вроде этого:

CVTWL адрес_памяти, RO COMPL RO, R1

Смежные вопросы