Я думаю, что всем нам нужно знать намного больше об особенностях вашего процессора, чтобы ответить на этот вопрос. Почему он не может делить на две степени по целым числам со знаком? Насколько я помню операция одинакова для обоих. * 1001 Т.е. *
10/2 = 00001010 переходит к 00000101
-10 / 2 = 11110110 переходит к 11111011
Возможно, вам следует написать какой-нибудь простой код, делающий деление без знака и деление со знаком, и сравнить скомпилированный вывод.
Кроме того, сравнительный анализ - хорошая идея. Это не должно быть точным. Просто получите массив из нескольких тысяч чисел, запустите таймер и начните делить их несколько миллионов раз и сколько времени это займет. Может быть, сделать несколько миллиардов раз, если ваш процессор работает быстро. Э.Г.
int s_numbers[] = { etc. etc. };
int s_array_size = sizeof(s_numbers);
unsigned int u_numbers[] = { etc. etc.};
unsigned int u_array_size = sizeof(u_numbers);
int i;
int s_result;
unsigned int u_result;
/* Start timer. */
for(i = 0; i < 100000000; i++)
{
i_result = s_numbers[i % s_array_size] / s_numbers[(i + 1) % s_array_size];
}
/* Stop timer and print difference. */
/* Repeat for unsigned integers. */
Написано в спешке, чтобы показать принцип, пожалуйста, прости любые ошибки.
Это не даст точного бенчмаркинга, но должно дать общее представление о том, что быстрее.