Ниже представлен рабочий код, но почему-то выводятся лишние нули после D. Объясните почему так происходит?
#include <stdio.h>
int ror(int a, int n)
{
int t1, t2;
n = n % (sizeof(a)*8); // нормализуем n
t1 = a >> n; // двигаем а влево на n бит, теряя младшие биты
t2 = a << (sizeof(a)*8 - n); // перегоняем младшие биты в старшие
return t1 | t2; // объединяем старшие и младшие биты
}
int main()
{
printf("%x", ror(0xFFAD, 4));
return 0;
}
Console output:
ad0000ff
int ror(int a, int n)
Тип int - это 32битное число. 32 бита это 4 байта, 4 байта - 8 символов в 16ричной системе. То есть передавая в функцию 0xFFAD вы на самом деле передаете 0x0000FFAD, и сдвигая на 4 бита получаете 0xAD0000FF. Ваша функция работает правильно
Если вы хотите именно 16битные числа смещать - измените тип параметра на short, получите то что вы ожидали. Если нули в начале должны игнорироваться - придется модифицировать функцию
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как можно средствами C++ развернуть свернутую программу и сделать её окно активным?
Я бы хотел разобраться в том, для чего именно в Стандарт C++ были добавлены ссылки &&Какие именно проблемы решает это нововведение?