/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Bit-tværsum i C(++)?
Fra : Bertel Lund Hansen


Dato : 29-01-05 10:25

Hej alle

Er der en bit-tværsumsberegning i C++, eller skal man lave den
selv?

Hvis man skal, kan det så gøres smartere end det her:

int bitsum (unsigned int number) {
int temp=0;
for (int n=0; n<32; ++n) {
if (number & 1) ++temp;
number/=2;
}
return temp;
}

--
Bertel
http://bertel.lundhansen.dk/   Fiduso: http://fiduso.dk/

 
 
Ivan Johansen (29-01-2005)
Kommentar
Fra : Ivan Johansen


Dato : 29-01-05 11:08

Bertel Lund Hansen wrote:
> Er der en bit-tværsumsberegning i C++, eller skal man lave den
> selv?

Du kan bruge std::bitset. For eksempel:

#include <bitset>
size_t bitsum(unsigned number)
{
std::bitset<32> bits(number);
return bits.count();
}

Ivan Johansen

Bertel Brander (29-01-2005)
Kommentar
Fra : Bertel Brander


Dato : 29-01-05 20:47

Bertel Lund Hansen wrote:
> Hej alle
>
> Er der en bit-tværsumsberegning i C++, eller skal man lave den
> selv?
>
> Hvis man skal, kan det så gøres smartere end det her:
>
> int bitsum (unsigned int number) {
> int temp=0;
> for (int n=0; n<32; ++n) {
> if (number & 1) ++temp;
> number/=2;
> }
> return temp;
> }
>

Man kunne lave:
int temp=0;
while (number) {
if (number & 1) ++temp;
number/=2;
}
Det er måske lidt hurtigere.
Ellers kan man dele int'en op char's og slå op i et array.

--
"We learned more from a three minute record, baby
than we ever learned in school"
- Bruce Springsteen

Bertel Brander (29-01-2005)
Kommentar
Fra : Bertel Brander


Dato : 29-01-05 22:56

Bertel Lund Hansen wrote:
> Hej alle
>
> Er der en bit-tværsumsberegning i C++, eller skal man lave den
> selv?
>

Der er også en algoritme her:
http://bmagic.sourceforge.net/bmsse2opt.html

--
"We learned more from a three minute record, baby
than we ever learned in school"
- Bruce Springsteen

Jesper Louis Anderse~ (30-01-2005)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 30-01-05 00:00

Bertel Brander <bertel@post4.tele.dk> wrote:
> Bertel Lund Hansen wrote:
>> Hej alle
>>
>> Er der en bit-tv?rsumsberegning i C++, eller skal man lave den
>> selv?
>>
>
> Der er ogs? en algoritme her:
> http://bmagic.sourceforge.net/bmsse2opt.html

Det kan blive sjovere:

http://www-db.stanford.edu/~manku/bitcount/bitcount.html

MIT er ikke en hurtig algoritme, men den er sjov ;)

--
jlouis

Ukendt (01-02-2005)
Kommentar
Fra : Ukendt


Dato : 01-02-05 02:15

"Bertel Lund Hansen" <nospamfilius@lundhansen.dk> skrev i en meddelelse
news:4jucizgtsnle.cjcqpumrn8ii$.dlg@40tude.net...
> Er der en bit-tværsumsberegning i C++, eller skal man lave den
> selv?
> Hvis man skal, kan det så gøres smartere end det her:

Et andet alternativ er:

int bitcount(unsigned long num)
{
num = (num & 0x55555555ul) + (num >> 1 & 0x55555555ul);
num = (num & 0x33333333ul) + (num >> 2 & 0x33333333ul);
num = (num & 0x07070707ul) + (num >> 4 & 0x07070707ul);
num = (num & 0x000F000Ful) + (num >> 8 & 0x000F000Ful);
return (num & 0x1F) + (num >> 16);
}

Det alternativ har den positive egenskab, at der ingen løkker er.

mvh.
Martin



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste