Potęgowanie i przesunięcie bitowe.

0

Witam,
Mam takie pytanie

Which two statements are equivalent?

1.16*4
2.16>>2
3.16/2^2
4.16>>>2

A. 1 and 2
B. 2 and 4
C. 3 and 4
D. 1 and 3

Prawidłowa odpowiedź to B.
Czy wyrażenie nr. 4 nie jest błędne?
>> to chyba przesunięcie bitowe ale >>> co znaczy?
Czy 2^2 to nie potęgowanie?
Czy mógłbym prosić osoby bardziej rozeznane o wyjaśnienie?

1

>>> to także przesunięcie bitowe - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
A operator ^ to xor.
Dokumentacja Twoim przyjacielem.

0

@Patryk27
Dzięki za pomoc
Mam jeszcze jeden problem
Mam takie zadanie:
After line 8 runs. how many objects are eligible for garbage collection?

public class X 
{
    public static void main(String [] args) 
    {
        X x = new X();
        X x2 = m1(x); /* Line 6 */
        X x4 = new X();
        x2 = x4; /* Line 8 */
        doComplexStuff();
    }
    static X m1(X mx) 
    {
        mx = new X();
        return mx;
    }
}

I nie rozumiem dlaczego odpowiedź jest 1. Moim zdaniem powinno być 2.
W linii 6 jak jest wywoływana funkcja m1 to przecież przekazujemy referencję do obiektu x i w tej funkcji przypisujemy nową wartość więc już jeden obiekt zostaje bez referencji i gc może się nim zająć, a następnie w linii 8 też do x2 przypisujemy nową referencję i to jest drugi obiekt którym gc może się zająć

1

podpowiedź:

void foo(int x)
{
   x = 42;
}

dodanie znacznika <code class="java"> - furious programming

0

@Azarien
Z tego co wiem to typy proste są przekazywane przekazywane przez wartość ale w tym przykąłdzie przekazywany przecież jest obiekt a nie typ prosty

1

No a referencja jest przekazywana przez wartość. Zatem przypisanie do referencji wewnątrz funkcji jest jak przypisanie do inta - znika po wyjściu z funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1