JavaRush /Blog Java /Random-PL /Wprowadzenie do operatorów Java: logiczne, arytmetyczne, ...

Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe

Opublikowano w grupie Random-PL
Porozmawiajmy o operacjach w Javie: numerycznych, logicznych, bitowych. Jest to podstawa teoretyczna, która na pewno jest potrzebna, aby nauczyć się programować. Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 1

Jakie są typy operatorów w Javie?

Do każdej operacji potrzebujemy co najmniej dwóch rzeczy:
  • operator;
  • operand.
Przykładowy operator byłby prostym plusem w operacji dodawania dwóch liczb. Dodane do siebie liczby będą w tym przypadku operandami. Zatem za pomocą operatorów wykonujemy operacje na jednym lub większej liczbie operandów. Operatory wykonujące operacje na dwóch operandach nazywane są binarnymi. Na przykład dodanie dwóch liczb. Operatory wykonujące operacje na pojedynczym operandze nazywane są jednoargumentowymi. Na przykład jednoargumentowy minus.

Operatorzy Java w kursie JavaRush

Kilka wykładów poświęconych jest operatorom Java na czwartym poziomie pierwszego zadania - Składnia Java. W szczególności operatory warunkowe, takie jak boolean . Kurs zawiera 22 zadania, które pomogą Ci zrozumieć działanie operatorów porównania, operatorów warunkowych i operatorów logicznych.

Operacje na liczbach w Javie

Najczęstszą operacją wykonywaną przez programistów na liczbach jest przypisanie wartości liczbowej do zmiennej. Ona, podobnie jak operator, =jest ci znana:
int a = 1;
int b = 2;
int c = 3;
Istnieją również operacje arytmetyczne. Wykonuje się je za pomocą binarnych operatorów arytmetycznych:
Tabela 1. Binarne operatory arytmetyczne
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 2Pierwsze cztery operatory nie powinny rodzić żadnych pytań: wszystko jest tak samo jak w matematyce. Ostatni operator, reszta dzielenia, również nie robi nic zbyt skomplikowanego. Na przykład, jeśli podzielimy 24 przez 7, otrzymamy 3 liczby całkowite i 3 resztę. Pozostałą część zwróci ten operator:
System.out.println(24 % 7); // drukuje 3
Oto przykłady z oficjalnej strony dokumentacji Oracle: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 3Ten program wyświetli następujące dane: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java pozwala łączyć: na przykład przypisania operatorów i operatory arytmetyczne. Spójrzmy na przykład:
int x = 0;
x = x + 1; // x = 0 + 1 => x = 1
x = x + 1; // x = 1 + 1 => x = 2
x = x + 1; // x = 2 + 1 => x = 3
Tutaj zdefiniowaliśmy zmienną xi przypisaliśmy jej wartość zero. Następnie w każdej linii przypisujemy wartość xbędącą sumą aktualnej wartości zmiennej xi jedynki. W komentarzach do każdej linijki znajdują się wyjaśnienia. Ta procedura nazywa się zwiększaniem lub zwiększaniem zmiennej. Operację inkrementacyjną z powyższego przykładu można zastąpić podobną, wykorzystując kombinację operatorów:
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
Operator przypisania można połączyć z dowolnym operatorem arytmetycznym:
int x = 0;
x += 10; // x = 0 + 10 => x = 10
x -= 5; // x = 10 - 5 => x = 5
x *= 5; // x = 5 * 5 => x = 25
x /= 5; // x = 25 / 5 => x = 5
x %= 3; // x = 5 % 3 => x = 2;
Pokażmy, jak działa ostatni przykład:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 4
Oprócz operatorów binarnych Java ma jednoargumentowe operatory arytmetyczne.
Tabela 2. Jednoargumentowe operatory arytmetyczne:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 4Przykład jednoargumentowego plusa i minusa:
int x = 0;
x = (+5) + (+15); // Nawiasy dla jasności, da się bez nich
System.out.println("x = " + x);

int y = -x;
System.out.println("y = " + y);
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 6
Operacje zwiększania i zmniejszania są zasadniczo proste. W pierwszym przypadku zmienna jest zwiększana o 1, w drugim zmienna jest zmniejszana o 1. Przykład poniżej:
int x = 9;
x++;
System.out.println(x); // 10

int y = 21;
y--;
System.out.println(y); // 20
Istnieją dwa rodzaje tych operacji - postfiks i prefiks. W pierwszym przypadku operator zapisywany jest po zmiennej, w drugim przypadku przed zmienną. Jedyna różnica polega na tym, kiedy wykonywana jest operacja zwiększania lub zmniejszania. Przykład i opis w tabeli poniżej. Powiedzmy, że mamy zmienną:
int a = 2;
Następnie:
Tabela 3. Operatory zwiększania i zmniejszania:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 5Demonstracja:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 8
Oprócz arytmetyki istnieją operacje porównania (dwóch liczb). Wynik zawsze będzie prawdziwy lub fałszywy ( prawda / fałsz ).
Tabela 4. Operatory porównania
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 9Przykłady:
int a = 1;
int b = 2;

boolean comparisonResult = a == b;
System.out.println("a == b :" + comparisonResult);

comparisonResult = a != b;
System.out.println("a != b :" + comparisonResult);

comparisonResult = a > b;
System.out.println("a >  b :" + comparisonResult);

comparisonResult = a >= b;
System.out.println("a >= b :" + comparisonResult);

comparisonResult = a < b;
System.out.println("a <  b :" + comparisonResult);

comparisonResult = a <= b;
System.out.println("a <= b :" + comparisonResult);
Demonstracja:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 10

Operacje logiczne w Javie

Spójrzmy na operacje logiczne i tablice prawdy każdego z nich:
  • operacja negacji ( NOT);
  • operacja koniunkcji, logiczne AND ( AND);
  • operacja rozłączenia, logiczne OR ( OR);
  • operacja dodawania modulo, wyłączne LUB ( XOR).
Operator negacji jest jednoargumentowy i dotyczy pojedynczego operandu. Wszystkie pozostałe operacje są binarne. Rozważmy tablice prawdy tych operacji. Tutaj 0 jest odpowiednikiem false w Javie, a 1 jest odpowiednikiem true .
Tabela 5. Tabela prawdy operatora negacji (NIE)
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 7
Tabela 6. Tablica prawdy operatora koniunkcji (AND)
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 8
Tabela 7. Tablica prawdy operatora alternatywy (OR)
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 9
Tabela 8. Tabela prawdy operatora dodawania modulo (XOR)
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 10Java ma te same operacje logiczne:
  • !— operator negacji;
  • &&— operator logiczny AND (krótki);
  • ||— logiczny operator OR (krótki);
  • &— bitowy operator AND;
  • |— bitowy operator OR;
  • ^— bitowy wyłączny operator OR.
Przyjrzyjmy się różnicy między operatorami bitowymi i skróconymi nieco poniżej, konwertując jednocześnie wszystkie tabele prawdy na kod Java:
public class LogicDemo {

   public static void main(String[] args) {
    notExample();
    andExample();
    orExample();
    xorExample();
   }

   public static void notExample() {
    System.out.println("NOT EXAMPLE:");
    System.out.println("NOT false = " + !false);
       System.out.println("NOT true  = " + !true);
    System.out.println();
   }

   public static void andExample() {
    System.out.println("AND EXAMPLE:");
    System.out.println("false AND false = " + (false & false));
    System.out.println("false AND true  = " + (false & true));
    System.out.println("true  AND false = " + (true & false));
    System.out.println("true  AND true  = " + (true & true));
    System.out.println();
   }

   public static void orExample() {
    System.out.println("OR EXAMPLE:");
    System.out.println("false OR false = " + (false | false));
    System.out.println("false OR true  = " + (false | true));
    System.out.println("true  OR false = " + (true | false));
     System.out.println("true  OR true  = " + (true | true));
    System.out.println();
   }

   public static void xorExample() {
    System.out.println("XOR EXAMPLE:");
    System.out.println("false XOR false = " + (false ^ false));
    System.out.println("false XOR true  = " + (false ^ true));
    System.out.println("true  XOR false = " + (true ^ false));
    System.out.println("true  XOR true  = " + (true ^ true));
    System.out.println();
   }
}
Ten program wyświetli: NIE PRZYKŁAD: NIE fałsz = prawda NIE prawda = fałsz ORAZ PRZYKŁAD: fałsz I fałsz = fałsz fałsz ORAZ prawda = fałsz prawda I fałsz = fałsz prawda I prawda = prawda LUB PRZYKŁAD: fałsz LUB fałsz = fałsz fałsz LUB prawda = prawda prawda OR fałsz = prawda prawda LUB prawda = prawda PRZYKŁAD XOR: fałsz XOR fałsz = fałsz fałsz XOR prawda = prawda prawda XOR fałsz = prawda prawda XOR prawda = fałsz Operatory logiczne mają zastosowanie tylko do booleanzmiennych. W naszym przypadku zastosowaliśmy je bezpośrednio do wartości, ale można ich również używać ze booleanzmiennymi:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 15
I do booleanwyrażeń:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 16
Teraz mamy operatory skrócone ( &&, ||) i podobne operatory bitowe ( &, |). Jaka jest różnica między nimi? Po pierwsze, bitowe można zastosować do liczb całkowitych. Porozmawiamy o tym nieco później. Po drugie, niektóre są skracane, a inne nie. Aby zrozumieć, jak wygląda skrót, spójrzmy na wyrażenie:

false AND x = ?
true OR x = ?
Może xto przyjąć dowolną wartość logiczną. I w ogóle, zgodnie z prawami logiki i tablicami prawdy, niezależnie od tego, czy jest to x prawda , czy fałsz , wynik pierwszego wyrażenia będzie fałszywy , a wynik drugiego będzie prawdziwy . Patrzeć.
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 17
Czasami wynik wyrażenia można obliczyć na podstawie pierwszego operandu. To właśnie odróżnia operatory skrócone &&i ||. W wyrażeniach podobnych do opisanych powyżej nie oceniają wartości drugiego operandu. Oto mały przykład:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 18
W przypadku operatorów skróconych druga część wyrażenia nie jest oceniana. Dzieje się tak jednak tylko wtedy, gdy wynik wyrażenia jest już oczywisty od pierwszego operandu.

Operacje bitowe w Javie

Cóż, tutaj dochodzimy do najciekawszej części: operacji bitowych. Jak sama nazwa wskazuje, są to operacje wykonywane na bitach. Zanim jednak zagłębimy się w ten temat, warto porozmawiać o obszarach pokrewnych.

Reprezentacja liczb w systemie liczb binarnych

Liczby, jak każda inna informacja w programie, są przechowywane w pamięci komputera w kodzie binarnym. Kod binarny to zbiór zer i jedynek. Każde zero lub jeden reprezentuje jednostkę informacji zwaną bitem.

Według Wikipedii:

Bit (od angielskiego cyfra binarna - liczba binarna; także gra słów: angielski bit - kawałek, cząsteczka) to jednostka miary ilości informacji. 1 bit informacji to symbol lub sygnał, który może przybierać dwa znaczenia: włączony lub wyłączony, tak lub nie, wysoki lub niski, naładowany lub nienaładowany; w systemie binarnym jest to 1 (jeden) lub 0 (zero).

Z jakimi danymi pracują operatory bitowe?

Operacje bitowe w Javie są wykonywane tylko na liczbach całkowitych. Liczby całkowite są przechowywane w pamięci komputera jako zbiór bitów. Można powiedzieć, że komputer przetwarza dowolną informację na system liczb binarnych (zestaw bitów) i dopiero wtedy z nią wchodzi w interakcję. Ale jak działa system liczb binarnych? W systemie dziesiętnym mamy tylko 10 symboli: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Tych symboli używamy do liczenia. Po 9 przychodzi 10, po 19 - 20, po 99 - 100, po 749 - 750. Oznacza to, że używamy kombinacji dostępnych 10 symboli i możemy ich używać do liczenia „od zera do obiadu”. W systemie binarnym zamiast dziesięciu symboli są tylko dwa - 0, 1. Ale łącząc te symbole według tej samej zasady, co w systemie dziesiętnym, możemy liczyć w nieskończoność.
Zademonstrujmy liczenie od 0 do 15 w systemie dziesiętnym i binarnym:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 11Jak widać, wszystko nie jest takie skomplikowane. Oprócz bitów istnieją inne znane jednostki informacji - bajty , kilobajty , megabajty , gigabajty itp. Prawdopodobnie wiesz, że w 1 bajcie jest 8 bitów . Co to znaczy? Oznacza to, że 8 bitów z rzędu zajmuje 1 bajt. Oto przykłady, jakie mogą być bajty:

00000000 - 1 bajt
10110010 - 1 bajt
01011011 - 1 bajt
Liczba możliwych, niepowtarzalnych kombinacji bitów w jednym bajcie wynosi 256 (2 8 = 256). Wróćmy jednak bliżej Javy. Istnieje taki typ danych całkowitych - byte. Ten typ może przyjmować wartości od -128 do 127, a jedna liczba w pamięci komputera zajmuje dokładnie 8 bitów, czyli 1 bajt. Jedna liczba tego typu zajmuje dokładnie 1 bytepamięć komputera. I tutaj nazwy pokrywają się nie przez przypadek. Jak pamiętamy, 1 bajt może przechowywać 256 różnych wartości. A jeden numer typu bytemoże przyjmować 256 różnych wartości (128 ujemnych, 127 dodatnich i 1 zero). Każda wartość liczbowa bytema unikalny zestaw ośmiu bitów. Dzieje się tak nie tylko w przypadku typu byte, ale wszystkich typów całkowitych. Typ bytepodano jako przykład najmniejszy. Poniższa tabela przedstawia wszystkie typy całkowite Java i zajmowaną przez nie przestrzeń pamięci: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 12Rozważmy typ int. Może przechowywać 2147483648 wartości ujemnych, 2147483647 wartości dodatnich i jedno zero. Całkowity:

2147483648 + 2147483647 + 1 = 4294967296.
Ten typ zajmuje 32 bity w pamięci komputera. Liczba możliwych kombinacji ze zbioru 32 zer i jedynek wynosi:
232 = 4294967296.
Taka sama liczba, jak liczba wartości, jakie może przechowywać typ int. To tylko demonstracja związku pomiędzy zakresem wartości typu danych a jego rozmiarem (liczbą bitów w pamięci). Dowolną liczbę dowolnego typu w Javie można przekonwertować na plik binarny. Zobaczmy, jak łatwo można to zrobić za pomocą języka Java. Dowiemy się na przykładzie typu int. Ten typ ma własną klasę opakowania - Integer. I ma taki toBinaryString, który wykona całą pracę za nas:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 21
Voila – to nie jest takie skomplikowane. Ale nadal trzeba coś wyjaśnić. intliczba zajmuje 32 bity. Kiedy jednak w powyższym przykładzie wypiszemy liczbę 10, w konsoli zobaczymy liczbę 1010. Dzieje się tak, ponieważ zera początkowe nie są drukowane. Gdyby były wyświetlane, zamiast 1010 zobaczylibyśmy w konsoli 00000000000000000000000000001010. Jednak dla łatwiejszej percepcji wszystkie zera wiodące zostały pominięte. Nie jest to takie trudne, dopóki nie zadasz sobie pytania: a co z liczbami ujemnymi? Postrzega informacje tylko w systemie binarnym. Okazuje się, że znak minus również należy zapisać w kodzie binarnym. Można to zrobić za pomocą kodu bezpośredniego lub uzupełniającego.

Kod bezpośredni

Metoda reprezentacji liczb w systemie liczb binarnych, w której najbardziej znaczący bit (bit skrajnie lewy) jest przypisany do znaku liczby. Jeśli liczba jest dodatnia, skrajny lewy bit jest zapisywany jako 0, jeśli jest ujemny – 1.
Spójrzmy na to na przykładzie liczby 8-bitowej:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 13Podejście jest proste i w zasadzie zrozumiałe. Ma jednak wady: trudności w wykonywaniu operacji matematycznych. Na przykład po dodaniu liczb ujemnych i dodatnich. Nie można ich złożyć, chyba że zostaną przeprowadzone dodatkowe manipulacje.

Dodatkowy kod

Używając dodatkowego kodu, możesz uniknąć wad kodu bezpośredniego. Istnieje prosty algorytm uzyskania dodatkowego kodu liczby. Spróbujmy uzyskać dodatkowy kod dla liczby -5. Przedstawmy tę liczbę za pomocą kodu uzupełnienia do dwójki w systemie liczb binarnych. Krok 1. Otrzymujemy reprezentację liczby ujemnej za pomocą kodu bezpośredniego. Dla -5 będzie to 10000101. Krok 2. Odwróć wszystkie cyfry z wyjątkiem cyfry znaku. Zamieńmy wszystkie zera na jedynki, a jedynki na zera wszędzie z wyjątkiem lewego bitu.

10000101 => 11111010
Krok 3. Dodaj jeden do wynikowej wartości:

11111010 + 1 = 11111011
Gotowy. Wartość -5 otrzymaliśmy w systemie binarnym za pomocą kodu uzupełnienia do dwójki. Jest to ważne dla zrozumienia poniższego materiału, ponieważ Java używa kodu uzupełnienia do dwóch do przechowywania liczb ujemnych w bitach.

Rodzaje operacji bitowych

Skoro już omówiliśmy wszystkie wstępy, porozmawiajmy o operacjach bitowych w Javie. Operacja bitowa wykonywana jest na liczbach całkowitych, a jej wynikiem jest liczba całkowita. W tym procesie liczba jest konwertowana na postać binarną, wykonywana jest operacja na każdym bicie, a wynik jest ponownie konwertowany na dziesiętny. Lista operacji znajduje się w poniższej tabeli: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 14Jak już się dowiedzieliśmy, liczby można przedstawić jako zbiór bitów. Operacje bitowe wykonują operacje na dokładnie każdym bicie takiej reprezentacji. Weźmy NOT, AND, OR, XOR. Przypomnijmy, że ostatnio przyglądaliśmy się tabelom prawdy tylko dla operandów logicznych. W tym przypadku te same operacje są stosowane do każdego bitu liczby całkowitej.

Bitowy operator jednoargumentowy NOT ~

Operator ten zastępuje wszystkie zera jedynkami, a jedynki zerami. Załóżmy, że mamy liczbę 10 w zapisie dziesiętnym. W systemie binarnym liczba ta wynosi 1010. Jeśli zastosujemy do tej liczby jednoargumentowy operator negacji bitowej, otrzymamy coś takiego: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 15Przyjrzyjmy się, jak to wygląda w kodzie Java:
public static void main(String[] args) {
   int a = 10;

   System.out.println(" a = " + a + "; binary string: " + Integer.toBinaryString(a));
   System.out.println("~a = " + ~a + "; binary string: " + Integer.toBinaryString(~a));
}
Zobaczmy teraz, co wyświetli się w konsoli:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 25
W pierwszym wierszu otrzymaliśmy wartość w systemie binarnym bez zer wiodących. Choć ich nie widzimy, oni tam są. Świadczy o tym druga linia, w której wszystkie bity zostały zamienione na odwrotne. Dlatego właśnie widzimy tak wiele wiodących jednostek. Są to dawne zera wiodące, które zostały zignorowane przez kompilator po wydrukowaniu w pierwszym wierszu. Oto mały program, który dla przejrzystości wyświetla również zera na początku.
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 26

Bitowy operator AND

Ten operator dotyczy dwóch liczb. Wykonuje operację ANDpomiędzy bitami każdej liczby. Spójrzmy na przykład: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 16Ta operacja jest wykonywana na dwóch liczbach. Przykład w kodzie Java:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 28

Bitowy operator OR

OR dotyczy dwóch liczb. Wykonuje operację OR pomiędzy bitami każdej liczby: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 17Przyjrzyjmy się teraz, jak by to wyglądało w IDEA:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 30

Operacja bitowa, wyłączne OR (XOR)

Spójrzmy na ten sam przykład, ale z nową operacją: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 18Przykładowy kod:
Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 32

Przesunięcie bitowe w lewo

Operator ten ma zastosowanie do dwóch operandów, co oznacza, że ​​w operacji x << ybity liczby xprzesuną się yw lewo. Co to znaczy? Spójrzmy na przykład operacji.Wynikiem 10 << 1 Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 19operacji będzie liczba 20 w systemie dziesiętnym. Jak widać na powyższym schemacie, wszystkie bity są przesunięte w lewo o 1. Podczas tej operacji traci się wartość najbardziej znaczącego bitu (bitu skrajnego z lewej strony). A najmniej znaczący bit (najbardziej prawy bit) jest wypełniony zerem. Co możesz powiedzieć o tej operacji?
  1. Przesuwając bity liczby Xo Nbity w lewo, mnożymy liczbę Xprzez 2 N .

    Oto przykład:

    Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 34
  2. Ale! Znak liczby może się zmienić, jeśli bit o wartości 1 zajmie skrajne lewe położenie.

  3. Jeśli przesuniesz się w lewo w nieskończoność, liczba po prostu zmieni się na 0. Zademonstrujmy punkty 2 i 3:

    Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 35

Przesunięcie bitowe w prawo

Ten operator dotyczy dwóch operandów. Te. w operacji x >> ybity liczby xprzesuną się yw prawo. Spójrzmy na inny przykład. Przeanalizujmy schematycznie działanie 10 >> 1. Przesuńmy wszystkie bity liczby 10 o jedną pozycję w prawo: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 20Podczas operacji przesuwania tracimy właściwe bity. Po prostu znikają. Bit skrajnie lewy jest znakiem liczby (0 jest dodatnie, 1 jest ujemne). Dlatego w wartości końcowej jest on umieszczony tak samo, jak w liczbie pierwotnej. Przykład z liczbą ujemną: Wprowadzenie do operatorów Java: logiczne, arytmetyczne, bitowe - 21Najbardziej prawy bit zostaje utracony, a skrajny lewy bit jest kopiowany z oryginalnej liczby, jako honorowy znak liczby. Jak to wszystko zrobić w IDEA? W zasadzie nic skomplikowanego, po prostu weź i przesuń:
Знакомство с операторами Java: логические, арифметические, побитовые - 38
Teraz. Co możesz powiedzieć o liczbach przesuniętych w prawo? Są podzielne przez 2. Za każdym razem, gdy przesuniemy się o jeden bit w prawo, dzielimy pierwotną liczbę przez 2. Jeśli liczba nie jest podzielna przez 2, wynik zostanie zaokrąglony w stronę minus nieskończoności (w dół). Ale to działa tylko wtedy, gdy przesuniemy bity dokładnie o 1. A jeśli o 2 bity, podzielimy przez 4. Przez 3 bity podzielimy przez 8. Przez 4 bity podzielimy przez 16. Widzisz? Potęgi liczby 2... Gdy przesuwamy liczbę Xw Nprawo o bity, dzielimy ją Xprzez 2 do potęgi 2 N. Demonstracja:
public class BitOperationsDemo {

   public static void main(String[] args) {

    for (int i = 1; i <= 10; i++) {

        int shiftOperationResult = 2048 >> i;
        int devideOperationResult = 2048 / (int) Math.pow(2, i);


           System.out.println(shiftOperationResult + " - " + devideOperationResult);
    }

   }

}
Co tu się dzieje?
  1. Pętla, w której zmienna i jest zwiększana od 1 do 10.

  2. W każdej iteracji obliczamy 2 wartości:
    • Do zmiennej zapisujemy shiftOperationResultwynik przesunięcia liczby 2048 o i bitów w prawo;

    • devideOperationResultWynik podzielenia liczby 2048 przez 2 do potęgi i zapisujemy do zmiennej .

  3. Wyświetlamy dwie uzyskane wartości parami.

Wynik wykonania programu jest następujący: 1024 - 1024 512 - 512 256 - 256 128 - 128 64 - 64 32 - 32 16 - 16 8 - 8 4 - 4 2 - 2

Bitowe przesunięcie w prawo z zerowym wypełnieniem

Podczas gdy normalne przesunięcie w prawo zachowuje znak liczby (najbardziej znaczący bit zachowuje swoją wartość), przesunięcie w prawo z zerem nie. Najbardziej znaczący bit jest wypełniony zerem. Zobaczmy jak to wygląda: Знакомство с операторами Java: логические, арифметические, побитовые - 22

Pierwszeństwo operacji w Javie

Podobnie jak matematyka, Java ma pierwszeństwo operacji. Poniższa tabela pokazuje priorytet (od najwyższego do najniższego) rozważanych operacji. Знакомство с операторами Java: логические, арифметические, побитовые - 23

Przydatne przykłady użycia

Wyznaczanie parzystości liczby

Знакомство с операторами Java: логические, арифметические, побитовые - 24

Znajdowanie maksymalnego elementu w tablicy

Знакомство с операторами Java: логические, арифметические, побитовые - 25Aby znaleźć element minimalny wystarczy zmienić znak porównania w odpowiednim miejscu.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION