| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| et:software:homelab:library:bit [2010/02/11 14:30] – toimetaja | et:software:homelab:library:bit [2020/07/20 12:00] (current) – external edit 127.0.0.1 |
|---|
| ====== Bitioperatsioonid ====== | ====== Bitioperatsioonid ====== |
| |
| Bitioperatsioonide teek on üldkasutatav makrofunktsioonide kogum tüüpiliste bititehete teostamiseks. Seda kasutavad kõik teised teegid, kuid seda võib kasutada ükskõik milliste registrite või andmete puhul, sest makrofunktsioonidel pole kindlat andmetüüpi. Funktsioonid sobivad nii 8-, 16- kui ka 32-bitiste muutujate ning registrite jaoks. | Bitioperatsioonide teek on üldkasutatav makrofunktsioonide kogum tüüpiliste bititehete teostamiseks. Neid funktsioone võib kasutada ükskõik milliste registrite või andmetüüpide puhul, sest makrofunktsioonidel pole kindlat andmetüüpi. Funktsioonid sobivad nii 8-, 16- kui ka 32-bitiste muutujate ning registrite jaoks. Neid bitioperatsioone kasutavad kõik teised teegi osad, seepärast on lähtekoodi alampeatükis funktsioonid ka välja kirjutatud. |
| |
| Bitiindeksiks loetakse biti järjekorranumbrit, alustades kõige vähemtähtsast (inglise keeles //least significant bit//, lühend LSB). Loendamine algab nullist. 8-bitiste arvude puhul on bitiindeksi väärtus 0-7, 16-bitiste puhul 0-15 ja 32-bitiste puhul 0-31. | Bitiindeksiks loetakse biti järjekorranumbrit, alustades kõige vähemtähtsast (inglise keeles //least significant bit//, lühend LSB). Loendamine algab nullist. 8-bitiste arvude puhul on bitiindeksi väärtus 0-7, 16-bitiste puhul 0-15 ja 32-bitiste puhul 0-31. |
| |
| <code c> | <code c> |
| | // |
| | // Funktsioonid bittidega tegelemiseks |
| | // |
| #define bit_mask(bit) (1 << (bit)) | #define bit_mask(bit) (1 << (bit)) |
| #define bit_set(value, bit) value |= bit_mask(bit) | #define bit_set(value, bit) value |= bit_mask(bit) |
| #define bit_is_clear(value, bit) (!((value) & (bit_mask(bit)))) | #define bit_is_clear(value, bit) (!((value) & (bit_mask(bit)))) |
| #define bit_set_to(v, b, x) v = ((x) ? (v | bit_mask(b)) : (v & ~bit_mask(b))) | #define bit_set_to(v, b, x) v = ((x) ? (v | bit_mask(b)) : (v & ~bit_mask(b))) |
| | |
| | // |
| | // Funktsioonid bitimaskidega tegelemiseks |
| | // |
| | #define bitmask_set(value, bitMask) value |= (bitMask) |
| | #define bitmask_clear(value, bitMask) value &= ~(bitMask) |
| | #define bitmask_invert(value, bitMask) value ^= (bitMask) |
| | #define bitmask_set_to(v, m, x) v = ((x) ? (v | (m)) : (v & ~(m))) |
| | #define bitmask_is_set(value, bitMask) ((value) & (bitMask)) |
| </code> | </code> |
| |