|
| 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 |
| | |
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
| |
|
|