C++ Fundamentals Roxettes - solution ( проблем )
Извинете, имам проблем с решението на тази задача : https://imagebin.ca/v/5JAoGDPIzYUJ.Това е кода за решението :
#include<iostream>
#include<iomanip>
using namespace std;
int hexSymbolToDecimal(char hex) {
if (hex >= 'a') {
return 10 + (hex - 'a');
}
else {
return hex - '0';
}
}
int main() {
cin.sync_with_stdio(false);
cout.sync_with_stdio(false);
const unsigned int NumHexDigitsPerNumber = 5;
char input[NumHexDigitsPerNumber] = {};
size_t xorred = 0;
while (cin >> input[0]) {
if (input[0] == '.') {
break;
}
cin >> input[1] >> input[2] >> input[3] >> input[4];
int value = 0;
for (int i = 0; i < NumHexDigitsPerNumber; i++) {
value = value << 4; // this is equivalent to value *= 16;, but works faster than multiplication
value += hexSymbolToDecimal(input[i]);
}
xorred ^= value;
}
cout << hex << setfill('0') << setw(5) << xorred << endl;
}
Пробмелът е в " for " цикъла при " value = value << 4 " . Разбрах как работи, но не разбрах защо трябва да го правим ? От това което видях е, че премества 4 бита наляво, като от дясната страна поставя нули. Въпросът ми е защо трябва да го правим и как работи това " hex " накрая с " setfill('0') и setw(5) ? Надявам се, че някой може да ми помогне да го разбера !
Извинете, но все още не разбирам. Можете ли да го обясните по-подробно моля ?
Четири binary shift-a са един hexadecimal (1111 (binary) = f (hex) = 15 (dec)) не забравяме, че броим "zero included". Независимо от бройната система, числата в паметта са в двоична (0 or 1) и затова shift-ваме броя битове, отговарящ на един разряд (кратността на бройната система) от числото. Това е същото ако го представим в десетична, умножим го по 16 и го върнем в шестнадесетична.
Аз като цяло не мога да разбера логиката на програмата .. Нямам почтин никакви знания по кампютърни науки. Благодаря все пак ! Ще попитам лектора !