![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Ludzie, ja wiem, że jest poźno, ale zacznijcie czytać tego manuala. Ciągniecie wątek pisząc coś, co nie jest prawdą.
Od kiedy w php znak "^" to potega? Według mnie i manuala: Cytat Operatory bitowe służą do operowania na wartościach konkretnych bitów w liczbie. Jeśli zarówno lewo jak i prawostronne operandy są typu string, operatory bitowe będą wykonywać operacje na poszczególnych znakach tych łańcuchów.
$a ^ $b Sumowanie bitowe modulo 2 Dany bit wynikowy jest równy 1 wtedy i tylko wtedy, kiedy jeden z bitów składowych jest równy 1 a drugi jest równy 0. A jeśłi mnie moja przemęczona głowa nie myli to: [php:1:d06f1d6bf9]<?php $a = $a ^ $b // jest równoznaczne z $a ^= $b ?>[/php:1:d06f1d6bf9] Przypominam także o: [php:1:d06f1d6bf9]<?php echo sprintf("Dwójkowo: %b", 123); ?>[/php:1:d06f1d6bf9] |
|
|
![]()
Post
#2
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Cytat To wytłumacz jeszcze (...)
Kod Bitowo: Już jasne ?
00000001 ^ 00000001 = 00000000 10101010 ^ 10101010 = 00000000 10101010 ^ 01010101 = 11111111 00011000 ^ 00110011 = 00100011 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 2.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
co w C++ znaczy:
Kod b = (a >> 24) | (a << 8);
i Kod va_list ap;
va_start(ap, format); va_arg(ap, unsigned char*) :cry: |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
Opłaca się studiować informatykę: (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
ptaszek to XOR Jak nie wiecie co to XOR to tu przykład 1 XOR 1 =0 1 XOR 0 =1 0 XOR 1 = 1 0 XOR 0 = 0 Czyli jeżeli mamy dwa różne bity to XOR na nich daje 1, jeżeli są równe daje zero. Bardziej "rozbudowane": 11110000111100000000 XOR 00001111000011110000 = 11111111111111110000 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
operatory >> oraz << służą do przesunięcia bitów w prawo/lewo.
Na przykład 10>>1=1 1<<1=10 1<<4=10000 Operator | oznacza bitowe or czyli bitowe dodawanie Bitowe dodawanie to coś takiego co daje wynik zero jeśli obydwa bity są równe zero, w każdym innym wypadku daje jeden Na przykład 110000 | 000001 = 110001 P.S. Była omyłka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
Na takie pytania wyrwane z kontekstu ciężko się odpowiada
Wyrażenie : Kod b = (a >> 24) | (a << 8);
Robi po kolei Przesuwa bitowo wartość zmiennej a w prawo o 24 miejsca, przesuwa bitowo wartość zmiennej a w lewo a następnie sumuje otrzymane liczby bitowo i przypisuje wynik zmiennej b. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cytat va_list structure Used to hold information needed by va_arg and va_end macros. Called function declares variable of type va_list that can be passed as argument to another function.
P.S. Ale wpadka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
ze względu na sporą niewiedzę ludzi na forum o operatorach bitowych postanowiłem przykleić go na pewien czas (dokładnie do dzisiaj wieczorem). Teraz jeszcze tylko dodatek o innych operatorach bitowych:
| -sumowanie bitowe 0 | 0 = 0 0 | 1 = 1 1 | 1 = 1 & -mnożenie bitowe 0 & 0 = 0 0 & 1 = 0 1 & 1 = 1 negacja bitowa ~ 0 = 1 ~ 1 = 0 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 2.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
Kod int gg_http_hash(const char *format, ...)
{ unsigned int a, c; va_list ap; int b = -1, i, j; va_start(ap, format); if (!format) return 0; for (j = 0; j < strlen(format); j++) { unsigned char *arg, buf[16]; if (format[j] == 'u') { snprintf(buf, sizeof(buf), "%d", va_arg(ap, uin_t)); arg = buf; } else { if (!(arg = va_arg(ap, unsigned char*))) arg = ""; } i = 0; while ((c = (int) arg[i++]) != 0) { a = (c ^ b) + (c << 8); b = (a >> 24) | (a << 8); } } return (b < 0 ? -b : b); } prosze oto calosc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
O boże a po co ci to? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat 1<<4=1000 chyba
1<<4=10000, jedno zero w tą czy w tą, ale zawsze sie liczy |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 2.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
zeby obliczyc hash dla adresu e-mail, hasla przy rejestrowaniu nowych nr gg a mam ta funkcje tylko w C++ i nei moge sobie poradzic z przelozeniem tego na php :mrgreen: bo wogole nie kumam C++ jest to moj pierwszy kontakt z tym jezykiem :]
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
No dobra...
Ostrzegam, jestem początkującym programistą i to może być wielka pomyłka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Proszę się nie śmiać jak ktoś zna C++, jestem jeszcze młodym studentem informatyki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) [php:1:a7884bbe73]int gg_http_hash(const char *format, ...) //deklaracja funkcji, pierwszy parametr to wskaźnik do stringa, funkcja może mieć opcjonalne parametry { unsigned int a, c; va_list ap; int b = -1, i, j; va_start(ap, format); //"przechwytujemy" dodatkowe (opcjonalne) parametry funkcji if (!format) //jeśli parametr format jest stringiem pustym (a w zasadzie to wskaznikiem na NULL albo zerem (' ') funkcja zwraca zero i kończy działanie return 0; //jeśli są parametry robimy z nimi różne śmieszne rzeczy. //poniżej (kawałkami tylko napiszę //wykonujemy tyle razy jaką długość miał format, deklarujemy wskażnik do stringa i stringa (lub jak kto woli: tablicę znaków) for (j = 0; j < strlen(format); j++) { unsigned char *arg, buf[16]; //jeżeli aktualny znak(pod tym indeksem w stringu, bo string to nic innego jak tablica znaków) stringa format jest równy 'u' to: if (format[j] == 'u') { // do buf wstawiamy znaki zakończone znakiem końca stringa, liczbę znaków którą opisuje liczba sizeof(buf) (czyli 16*8 bitów), następnie jest formatowanie, po kolejnym przecinku jest źródło czyli pobieramy kolejny przekazany opcjonalny parametr (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) snprintf(buf, sizeof(buf), "%d", va_arg(ap, uin_t)); // w arg zapisujemy to cośmy przed chwilą dostali arg = buf; } else { //jeżeli aktualny argument nie jest znakiem 0 (czyli " ") to w arg zapisujemy nic (czyli " "), jeżeli nie był pusty to zostawiamy go if (!(arg = va_arg(ap, unsigned char*))) arg = ""; } i = 0; //zczytujemy sobie po kolei (po znaku) z arg znaki i robimy z nimi bitowe szaleństwa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) while ((c = (int) arg[i++]) != 0) { a = (c ^ (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) + (c << 8); b = (a >> 24) | (a << 8); } } //jeżeli po tym wszytkim b < od zera to zamieniamy je na dodatnie, jeżeli dodatnie to zwracamy je return (b < 0 ? -b : (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) ; }[/php:1:a7884bbe73] |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
Po ludzku, dostajemy do funkcji nieznaną ilość parametrów, znamy tylko (nie jestem pewnien) ilość tych parametrów.
Następnie je zasysamy, po 16(długość buf)*8(długość typu char) bitów, i przemielamy za pomocą różnych operatorów logicznych, jeśli dla aktualnego parametru (tu: miejsce w pamięci) znak w stringu format ma wartość 'u'. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 2.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
dzieki! dzieki! ... a teraz zobaczymy co z tym zrobic :]
zapomnialem dodac ze format... - format kolejnych parametrów ('s' jesli dany parametr jest ciagiem znaków lub 'u' jesli numerem GG) ale i tak jest dobzre (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) zrob z tego [ php ] a nei [ code ] to bedzie wyrazniej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) dzieki |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
Matko święta, naprawdę ci pomogłem?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Dziwne, bo jeszcze nie miałem c++ (jestem dopiero na drugim semestrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 2.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
pomogles ... wczesniej wogole ne iwiedzialem co z tym zrobic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) i co wiekszosc z tych znczkow oznacza (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat Operatory bitowe służą do operowania na wartościach konkretnych bitów w liczbie.
Sorry za lamerstwo: ale do czego to służy?! Tzn. jakie są konkretne zastosowania tego "czegoś"? |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat zeby obliczyc hash dla adresu e-mail, hasla przy rejestrowaniu nowych nr gg
Za przeproszeniem czytać nie umiesz? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Generalnie chodzi o to że musisz wydobyć jakieś dane a są one znakowo, a ty potrzebujesz konkretnych bitów. W php to się raczej rzadko przydaje, ale w C, C++ często. Na przykład do obsługi ekranu. Bo tam ustawiasz konkretny bit, a nie np: cały znak (czyli 255 dziesiętnie, FF szesnastkowo, dwójkowo 11111111) Np: żeby zapisać 4 "opcje" np": ma kółko/nie ma ma kierownice/nie ma ma dach/nie ma ma siedzenia/nie ma normalnie potrzebujesz czterech zmiennych. Ale da się to zrobić jedną zmienną. Po prostu: 0 to niczego nie ma 1 ma kółko, nie ma reszty 2 ma kierownice, nie ma reszty 3 ma kółko, ma kierownice, nie ma reszty itd. Ale łatwiej zapisać (wg mnie i innych też (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) 0000 nie ma nic 0001 ma kółko 1001 ma kółko i siedzenia. jak wyzerować coś? Konkretne miejsce? a prosto, potrzebujesz jedynie "wzorców", a wygląda to tak: masz ustawione ustawienia=0000 chcesz żeby były siedzenia, robisz tak: siedzenia=1000; nowe=siedzenia|ustawienia; co więcej: to wyrażenie nie zmieni wartości pozostałych bitów, po prostu masz pewność że na najstarszym bicie będziesz miał 1. A jak coś sprawdzić? Pomyśl, idę już spać, jak chcesz to dopiszę jutro jeszcze trochę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat Za przeproszeniem czytać nie umiesz? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Chodziło mi, żeby ktoś to opisał dokładnie w taki sposób (na prostym przykładzie) jak Ty to zrobiłeś. Cytat W php to się raczej rzadko przydaje, ale w C, C++ często.
Teraz widzę że raczej tak :-) Cytat Ale łatwiej zapisać (wg mnie i innych też (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
0000 nie ma nic 0001 ma kółko 1001 ma kółko i siedzenia. Ale wydaje mi się że w php raczej nie jest konieczne czy potrzebne stosowanie czegoś takiego. Cytat A jak coś sprawdzić? Pomyśl, idę już spać, jak chcesz to dopiszę jutro jeszcze trochę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Może operator &? Nie śmiejcie się proszę! A wyjaśniania starczy. Już wiem (mniej więcej) o co chodzi. Mam teraz ogólne pojęcie o tym, ale i tak magia, dzięki za wyjaśnienia. Przydałaby się teraz opcja drukowania. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 23.04.2003 Skąd: Mysłowice Ostrzeżenie: (0%) ![]() ![]() |
Co do tego że w php niepotrzebne to nie tak do końca, bo np jeżeli robisz duży projekt a masz ograniczenie pamięci do jakiejśtam wartości to użycie tego sposobu zapisu daje znaczne oszczędności. Ale to musiałby być naprawdę duży projekt.
Dodam, że typ int ma 32 bity, czyli daje możliwość zapisania 32 "opcji". Gdyby zapisywać każdą opcję w osobnej zmiennej typu int to zajętość pamięci = 32*32= 1024 bity czyli 128 bajtów, natomiast w jednej zmiennej byłyby to tylko 4 bajty. Różnica jest i to znaczna (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) P.S. Jeżeli chcesz/chcecie to przybliże tą tematykę jeszcze dokładniej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) P.P.S. Pozatem zmiana (wyłączenie wszystkich, włączenie wszystkich itd) takich 32 opcji jeśli są zapisane w 32 zmiennych wymaga 32 przypisań, jeżeli w jednej zmiennej dwójkowo to jest potrzebne tylko jedno przypisanie! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 21:13 |