Προς το περιεχόμενο

bitwise operations - please help


sorceress

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

An kai de to exw xrhsimopoihsei pote (h toulaxisto oxi gia kapoia xronia), auto pou kanei to parapanw einai idio me to:

i = i >> 1;

dhladh shift kata 1 8esh pros ta deksia ths binary (dyadikhs) anaparastashs tou i. O ari8mos sta deksia prepei na einai panta 8etikos akeraios. to parapanw isodynamei me diaresh tou i me to 2 (pio swsta to 2^1)

Δημοσ.

Βασικά αυτό που κάνει αυτός ο τελεστής ( >> ) είναι ότι κάνει shift δεξιά τα ψηφία του αριστερού μέλους τόσα όσα δείχνει το δεξί μέλος.

Δηλαδή, έστω ότι παραπάνω έχεις int i = 8 (στο δυαδικό είναι 1000). Παρακάτω έχεις i>>1, επομένως κάνεις shift τα ψηφεία του i κατά 1, δηλαδή το τελικό αποτέλεσμα στο δυαδικό είναι 100, δηλαδή 4. Αν είχες i>>2, το αποτέλεσμα θα ήταν 10, δηλαδή το 2 και πάει λέγοντας.

Επλίζω να έγινα κατανοητός :)

Δημοσ.

Για όλους τους ακεραίους x είναι: x = 3*π + υ, π το πηλίκο της ακέραιας διαίρεσης x:3, υ=0,1,2 το υπόλοιπο.

Είναι: x%3=υ

x + x/3 = x + π = 3*π + υ + π = 4*π + υ.

Από τον τελευταίο ακέραιο, για να υπολογίσουμε το: (x+x/3)&3, κρατάμε τα 3 λιγότερο σημαντικά bits (αυτό κάνει η πράξη &3). Όμως, το 4*π έχει τα 2 LSBits ίσα με το 0 (ως πολλαπλάσιο του 4), ενώ το υ (0,1 ή 2) έχει όλη του την αξία σε αυτά τα bits (τα υπόλοιπα είναι πάντα 0). Οπότε, (x+x/3)&3 = (4*π+υ)&3 = υ = x%3.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...