В наборе инструкций MIPS32 имеются две инструкции для битового сдвига вправо: 1) sra - арифметический сдвиг; 2) srl - логический сдвиг.
При арифметическом сдвиге знак числа распространяется.
При описании операции >> в книгах по языку программирования Си указывается, что для чисел без знака будет использоваться логический сдвиг, а для чисел со знаком используемая операция зависит от реализации (в частности, от процессорной архитектуры, в которую транслируется код; есть ли там команда арифметического сдвига).
Написал маленькую тестовую программу на Си для проверки действий на процессорных архитектурах x86 и MIPS:
#include <stdio.h>
#include <inttypes.h>
int main ()
{
int32_t val;
val = 0x80000000;
val = val >> 31;
if (val == -1) // -1 = 0xFFFFFFFF
printf ("Arithetic shifting is used for right shifting\n");
else
printf ("Logical shifting is used for right shifting\n");
return 0;
}
В двух вариантах архитектуры программа показала использование арифметического сдвига.
При арифметическом сдвиге знак числа распространяется.
При описании операции >> в книгах по языку программирования Си указывается, что для чисел без знака будет использоваться логический сдвиг, а для чисел со знаком используемая операция зависит от реализации (в частности, от процессорной архитектуры, в которую транслируется код; есть ли там команда арифметического сдвига).
Написал маленькую тестовую программу на Си для проверки действий на процессорных архитектурах x86 и MIPS:
#include <stdio.h>
#include <inttypes.h>
int main ()
{
int32_t val;
val = 0x80000000;
val = val >> 31;
if (val == -1) // -1 = 0xFFFFFFFF
printf ("Arithetic shifting is used for right shifting\n");
else
printf ("Logical shifting is used for right shifting\n");
return 0;
}
В двух вариантах архитектуры программа показала использование арифметического сдвига.
Комментариев нет:
Отправить комментарий