[Delphi] shl, shr

0

Cześć!
Mam pytanko, w jednym z modółów Turbo Pascala 3 znalazłem polecenia, które działają w Delphi - shl, i shr. Czy moglibyście mi podpowiedzieć, jakie one wykonują działanie, do czemo są przydatne itp?? Z góry dzięki bardzo za wszystkie podpowiedzi. Pa

--
"Jeżeli myślisz że jest dobrze... kompletnie się mylisz"
www.PAST-SKRIPTUM.prv.pl

0

shl - przesunięcie bitowe w lewo
shr - przesunięcie bitowe w prawo

a shl b = a * 2^b
a shr b = a div 2^b

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

Dzięki za podpowiedź, ale czy mógłbym troszku jaśniej poprosić?? :P Tak za bardzo nie rozumiem tego 2b i 2a, dzięki, pa

--
"Jeżeli myślisz że jest dobrze... kompletnie się mylisz"
www.PAST-SKRIPTUM.prv.pl

0

za bardzo nie rozumiem tego 2b i 2a, dzięki, pa

2^b - 2 do potęgi b

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

Dzięki za podpowiedź, taraz jestem mądry :P :):):). Tylko mam pytanko... Ja mam te dwie zmienne a i b typu integer, i nie wiem czemu, wyświetla mi błąd (w miejscy 2^b ) "Pointer type required". Czy mógłbyś mi coś na to poradzić?? Z góry wielkie dzięki. PAPAPA

--
"Jeżeli myślisz że jest dobrze... kompletnie się mylisz"
www.PAST-SKRIPTUM.prv.pl

0

^ nie jest operatorem potęgi w Pascalu. Użyłem go, aby pokazać, że
a shl b zwróci a pomnożone o b-tą potęge 2

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

Dzięki za podpowiedź, ale czy mógłbym troszku jaśniej poprosić?? :P Tak za bardzo nie rozumiem tego 2b i 2a, dzięki, pa

Masz liczbę 149
reprezentowaną przez ciąg bitów:
10010101

149 shl 4 = 2384
a binarnie
100101010000

Czyli 149*24 = 2384 (24 oznacza 2 do potęgi 4)
Całość została przesunięta o 4 miejsca w lewo, a na powstałe miejsca weszły 0.

Podobnie z shr:

149 shr 4 = 9
00001001
Czyli 149 shr 4 = Trunc(149:2^4)
Całość o 4 w prawo (to nie jest tak prosto. Bo trochę inaczej jest jeżeli są liczby ujemne w U2, ale dla zrozumienia wystarczy).

--
Jest jeszcze jeden błąd ... :)
--------Oficjalny kanał----------
Service for programmers w IRC:
Kanał: #4programmers.net
Serwer: warszawa.ircnet.pl
Sieć: POLNet
Port: 6667

0

Dobrze, a jest jakiś w Delphi odpowiednik potęgowania?? Nire chce mi się troszkę pisać pętli for :).
PS. Jak zmienić liczbę na układ bitowy 1 i 0??

--
"Jeżeli myślisz że jest dobrze... kompletnie się mylisz"
www.PAST-SKRIPTUM.prv.pl

0

Dobrze, a jest jakiś w Delphi odpowiednik potęgowania?? Nire chce mi się troszkę pisać pętli for :).
PS. Jak zmienić liczbę na układ bitowy 1 i 0??

Power(Podstawa, Wykładnik) w module Math
0 i 1 - użyj kalkulatora :)
W kodach źródłowych jest coś.

--
Jest jeszcze jeden błąd ... :)
--------Oficjalny kanał----------
Service for programmers w IRC:
Kanał: #4programmers.net
Serwer: warszawa.ircnet.pl
Sieć: POLNet
Port: 6667

0

Jak zmienić liczbę na układ bitowy 1 i 0??

Dla liczby typu int: (dla innej zmienić element wytłuszczony)

[code]int IleBitow = sizeof(int)*8;
AnsiString liczbaStr;
liczbaStr.SetLength(IleBitow);
int liczbaInt = 1234; //na przykład
for (int i=0; i<IleBitow; i++)
{liczbaStr[IleBitow-i] = (liczbaInt&1)?'1':'0';
liczbaInt>>=1;
}[/code]

0

Tłumaczenie na Delphi:

<quote> [code]int IleBitow = sizeof(int)*8; AnsiString liczbaStr; liczbaStr.SetLength(IleBitow); int liczbaInt = 1234; //na przykład for (int i=0; i>=1; }[/code]

[code]
var
liczbaStr: string;;
liczbaInt: Integer;
i: Integer;
begin
SetLength(liczbaStr, SizeOf(liczbaInt));
liczbaInt:=1234; // na przykład
for i:=1 to IleBitod do begin
if liczbaInt and 1 = 1
then liczbaStr[IleBitow - i + 1]:='1 '
else liczbaStr[IleBitow - i + 1]:='0';
libczbaInt:=liczbaInt shr 1
end
end;
[/code]

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

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