Bit Sifting
Имам нужда от помощ.Пробвах този код http://pastebin.com/rjwLbPpJ в judge-а , но ми дава резултат 70 ,а не мога да си открия грешката
Имам нужда от помощ.Пробвах този код http://pastebin.com/rjwLbPpJ в judge-а , но ми дава резултат 70 ,а не мога да си открия грешката
Здравей, на ред 20: newNum =(ulong)(1 << j)|newNum;
кастни само единицата преди да я изместиш -> newNum =((ulong)1 << j)|newNum;
Стана верно , но ако можеш да.ми кажеш и каква е разликата защото на.мен ми се струват еднакви двата варианта
Пролемът е, според мен, че тази операция: (1 << j) ще върне 32 битово числo, което чак след това се преобразува към (ulong).
За повече яснота може да се прегледа как действа тази част от кода:
ulong n;
for (int j = 0; j < 64; j++)
{
n = (ulong)(1 << j);
}
след 31-та итерация (стойността на n).
А по дадения начин: ((ulong)1 << j) резултатът е 64-битово число.
Именно, ако преместиш единицата 63 позиции, тя просто на 32-рото преместване ще превърти и ще започне отново да мести битовете на 1-цата