Примерчик, не пойму как работает=\ (хэш-коды)

Модератор: Модераторы разделов

Аватара пользователя
MUTOgen
Сообщения: 343
Статус: i like the way you move
ОС: OpenSuse 11.1

Примерчик, не пойму как работает=\

Сообщение MUTOgen »

Читал одну умную книжку... нашел там упоминание краем о хэш-кодах. Решил сделать маленькую тестовую программу чтоб понять как он формируется... понимаение не пришло( может кто-то разъяснит по полочкам как следует и что получает этот алгоритм?

Код:

#include <iostream> #include "/home/head.h" using namespace std; int main(){ int ii=0; char *s="Add"; char *pp=s; while(*pp) {ii=ii<<1^*pp++;} cout << "Hesh= " << ii << endl; return 0; }

Результат данного кода:

Код:

Hesh= 424


P.S. Т.е. по отдельности все понятно. Сдиг влево (умножение на степень двойки), "сумма по модулю 2"... но как это работает в совокупности и почему такой ответ никак не осилю...
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Примерчик, не пойму как работает=\

Сообщение Subj »

while(*pp) {ii=ii<<1^*pp++;}
Руки вырывать за такое надо.
Building better software with Ada
Спасибо сказали:
Аватара пользователя
MUTOgen
Сообщения: 343
Статус: i like the way you move
ОС: OpenSuse 11.1

Re: Примерчик, не пойму как работает=\

Сообщение MUTOgen »

Subj писал(а):
18.07.2008 03:52
while(*pp) {ii=ii<<1^*pp++;}
Руки вырывать за такое надо.

тогда вырвите сперва Страуструпу )))
Спасибо сказали:
nestoklon
Сообщения: 42
ОС: M$, linux

Re: Примерчик, не пойму как работает=\

Сообщение nestoklon »

Код: Выделить всё

#include <iostream>
//#include "/home/head.h"
using namespace std;
int main(){
int ii=0;
int iip=0;
char ppp;
char *s="Add";
char *pp=s;
while(*pp)
{
    iip=ii;
    ppp=*pp++;
    ii=ii<<1^ppp;
        cout << ii << '=' << iip << "<<1^" << (int)ppp << "(=" << (iip<<1) <<'^'<< (int)(ppp)<<')' << endl;
}
cout << "H[b]a[/b]sh= " << ii << endl;
return 0;
}


Код: Выделить всё

65=0<<1^65(=0^65)
230=65<<1^100(=130^100)
424=230<<1^100(=460^100)
Hash= 424


UPD упс.
Спасибо сказали:
Аватара пользователя
MUTOgen
Сообщения: 343
Статус: i like the way you move
ОС: OpenSuse 11.1

Re: Примерчик, не пойму как работает=\

Сообщение MUTOgen »

nestoklon писал(а):
18.07.2008 11:21

Код: Выделить всё

#include <iostream>
//#include "/home/head.h"
using namespace std;
int main(){
int ii=0;
int iip=0;
char ppp;
char *s="Add";
char *pp=s;
while(*pp)
{
    iip=ii;
    ppp=*pp++;
    ii=ii<<1^ppp;
        cout << ii << '=' << iip << "<<1^" << (int)ppp << "(=" << (iip<<1) <<'^'<< (int)(ppp)<<')' << endl;
}
cout << "H[b]a[/b]sh= " << ii << endl;
return 0;
}


Код: Выделить всё

65=0<<1^65(=0^65)
230=65<<1^100(=130^100)
424=230<<1^100(=460^100)
Hash= 424


UPD упс.

Спасибо за исчерпывающий пример. Стало понятно. Не додумался до такого разложения на составляющие)
Спасибо сказали: