Postavljanje bitov (že spet :-)

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

Postavljanje bitov (že spet :-)

OdgovorNapisal/-a Kroko » 28 Okt 2017, 01:03

Imam array 480 bytov. To je nekaj čez 3800 bitov.
Rad bi postavil (ali izbrisal) 1000 bit s tem, da je prvi bit na koncu arraya.

Na primer, za postavit bit 1 naredim array[479] |= 1, za postavit drugi bit array[479] |= 2...

Ima kdo tako funkcijo že narejeno?

PS
Deljenja se izogibam.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4805
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 684 krat
Prejel zahvalo: 1665 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Postavljanje bitov (že spet :-)

OdgovorNapisal/-a gumby » 28 Okt 2017, 08:04

Nekako boš moral izračunati index... namesto deljenja z 8 daš shift za 3 bite.
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2590
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 109 krat
Prejel zahvalo: 612 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 63

Re: Postavljanje bitov (že spet :-)

OdgovorNapisal/-a gumby » 28 Okt 2017, 08:27

Tole kao dela:
Koda: Izberi vse
#include <stdint.h>

#define LEN 480

uint8_t array[LEN];

static void set_bit(uint16_t index) {
   uint16_t byte = index >> 3;
   uint8_t bit = index - (byte << 3);
   array[LEN - byte - 1] |= 1 << bit;
}

int main(void)
{
   for(uint16_t i = 0; i < LEN; i++) {
      set_bit(i);
   }
}
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2590
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 109 krat
Prejel zahvalo: 612 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 63

Re: Postavljanje bitov (že spet :-)

OdgovorNapisal/-a peterp » 28 Okt 2017, 10:11

Pred kratkim sem naletel na tole zanimivo spletno stran: Bit Twiddling Hacks. Morda komu kdaj pomaga rešiti problem.
peterp
 
Prispevkov: 661
Pridružen: 23 Feb 2015, 14:52
Kraj: Maribor
Zahvalil se je: 170 krat
Prejel zahvalo: 112 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 114

Re: Postavljanje bitov (že spet :-)

OdgovorNapisal/-a mujo » 28 Okt 2017, 12:32

Kroko,
Za katero platformo bi to potreboval?
mujo
 
Prispevkov: 734
Pridružen: 21 Jan 2015, 10:50
Kraj: MB
Zahvalil se je: 1 krat
Prejel zahvalo: 150 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 18

Re: Postavljanje bitov (že spet :-)

OdgovorNapisal/-a Kroko » 28 Okt 2017, 12:47

Platforma ARM CM4 in mogoče tudi CM0.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4805
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 684 krat
Prejel zahvalo: 1665 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 2 gostov