Преобразовать число и вывести в hex - C (СИ)
Формулировка задачи:
Всем ПРИВЕТ!
Помогите, пожалуйста, разобраться с кодом написанным на Си подобном языке.
Программа взята из реально работающего проекта. Она должна взять число десятичное (123456) перевести его в ХЕКС и прописать 56 34 12, но это уже в ХЕКСе должно быть 56 34 12.
Я там сам понапичкал её ПРИНТФ-ами, но так и не разобрался как она работает
Да и результат у меня что-то совсем не 56 34 12.
Помогите пожалуйста комментариями к листингу и объясните почему у менея 56 34 12 не получается.
Извините, возможно, за слишком много вопросов, я учусь
Var5, Var6, Var7 соответственно 56, 34, 12.
Вот результат выполнения программы:
Var0=123456;- 123456
Var2=Var0$10;- 6
Var0=Var0/10;- 12345
Var2=Var2|((Var0$10)<<4);- 86
Var2=Var2|((Var0$10)<<8);- 1110
Var0=Var0/10;- 123
Var2=Var2|((Var0$10)<<12);- 13398
Var0=Var0/10;- 12
Var2=Var2|((Var0)<<16);- 144470
Var0=Var0/10;- 1
Var2=Var2|((Var0$10)<<20);- 1193046
Var5=Var2&255;- 86
Var6 = Var2 >> 8;- 4660
Var7 = Var2 >> 16;- 18
К стати, я являюсь призёром Украины по горным лыжам, если кого-то устроит, то можем сделать бартер. Вы меня по Си поднатаскаете, а я вас по спорту. На Буковеле позанимемся.
#include <stdio.h>
unsigned long Var0, Var2, Var5, Var6, Var7;
int main( void )
{
Var0=123456;
printf("\n Var0=123456;- %d",Var0);
Var2=Var0%10;
printf("\n Var2=Var0$10;- %d",Var2);
Var0=Var0/10;
printf("\n Var0=Var0/10;- %d",Var0);
Var2=Var2|((Var0%10)<<4); Var0=Var0/10;
printf("\n Var2=Var2|((Var0$10)<<4);- %d",Var2);
Var2=Var2|((Var0%10)<<8);
printf("\n Var2=Var2|((Var0$10)<<8);- %d",Var2);
Var0=Var0/10;
printf("\n Var0=Var0/10;- %d",Var0);
Var2=Var2|((Var0%10)<<12);
printf("\n Var2=Var2|((Var0$10)<<12);- %d",Var2);
Var0=Var0/10;
printf("\n Var0=Var0/10;- %d",Var0);
Var2=Var2|((Var0%10)<<16);
printf("\n Var2=Var2|((Var0%10)<<16);- %d",Var2);
Var0=Var0/10;
printf("\n Var0=Var0/10;- %d",Var0);
Var2=Var2|((Var0%10)<<20);
printf("\n Var2=Var2|((Var0$10)<<20);- %d",Var2);
Var5=Var2&255;
printf("\n Var5=Var2&255;- %d",Var5);
Var6 = Var2 >> 8;
printf("\n Var6 = Var2 >> 8;- %d",Var6);
Var7 = Var2 >> 16;
printf("\n Var7 = Var2 >> 16;- %d",Var7);
system("PAUSE");
return 0;
}Решение задачи: «Преобразовать число и вывести в hex»
textual
Листинг программы
#include <stdio.h>
int Distance ;
int Var0, Var1, Var2, Var3, Var4;
int main (void)
{
printf ("Введіть пробіг ");
scanf ("%x", &Distance );
Var0 = Distance & 0xFF;
printf ("\nVar0-%x", Var0);
Var1 = (Distance >> 8) & 0xFF;
printf ("\nVar1-%x", Var1);
Var2 = (Distance >> 16) & 255;
printf ("\nVar2-%x", Var2);
Var3 = Var2 ^ 0xFF;
printf ("\nVar3-%x", Var3);
Var4 = (Var1 + Var0) ^ 0xFF;
printf ("\nVar4-%x", Var4);
printf ("\n\n :00:01:02:03:04:05:06:");
printf ("\n 0000 |%x|%x|%x|%x|%x|\n", Var0, Var1, Var2, Var3, Var4);
return 0;
}
Объяснение кода листинга программы
- Включаем файл
для работы с выводом в консоль - Объявляем переменную Distance типа int для хранения значения расстояния
- Объявляем пять переменных Var0, Var1, Var2, Var3, Var4 типа int для хранения полученных значений
- В функции main() выводим приглашение для ввода расстояния
- Считываем значение расстояния с помощью функции scanf() в переменную Distance
- Вычисляем и сохраняем значение Var0, обрезая байты слева и применяя операцию AND с 0xFF
- Выводим значение Var0 в консоль
- Вычисляем и сохраняем значение Var1, обрезая байты слева и применяя операцию AND с 0xFF, сдвигая значение расстояния на 8 позиций вправо
- Выводим значение Var1 в консоль
- Вычисляем и сохраняем значение Var2, обрезая байты слева и применяя операцию AND с 0xFF, сдвигая значение расстояния на 16 позиций вправо
- Вычисляем и сохраняем значение Var3, применяя операцию XOR к значению Var2 и 0xFF
- Вычисляем и сохраняем значение Var4, складывая значения Var1 и Var0 и применяя операцию XOR к результату и 0xFF
- Выводим значение Var4 в консоль
- Выводим шестнадцатеричное представление значения переменных Var0, Var1, Var2, Var3, Var4 в формате 0000 |%x|%x|%x|%x|%x|
- Возвращаем 0 из функции main(), что означает успешный конец работы программы