Diskuze: Zápis bitu do byte
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Prvni co me napadlo asi takhle, snad jsem to napsal dobre (nezkousel jsem
to), origValue je hodnota, do ktery to chces zapsat, bitValue je 1 nebo 0 a pos
je pozice bitu od konce, mozna to jde i nejak jednodusejc, ale nemam ted moc cas
ted nad tim nejak vic premyslet
int writeBit(byte origValue, byte bitValue, byte pos)
{
// vynulovat misto, kam bit prijde
origValue = origValue & ~(1 << pos);
// zapsat bit
origValue = origValue | (bitValue << pos);
return origValue;
}
Ak by mi nenapadlo nič iné, tak by som použil jednoduchú matematiku. Existuje implicitná konverzia medzi typom byte a väčšinou číselných typov. Nastaviť n-tý bit s hodnotou 0 na 1 môžeš tým, že obsah premennej typu byte prenásobíš 2n. Opačný efekt dosiahneš logicky delením.
byte x = 0b10;
x = (byte)(x + 2*4);
Console.WriteLine(Convert.ToString(x, 2));
// output: 1010
Nie je to pekné a fungovalo by aj použitie bitwise operátorov, ale je to krátke, čitateľné a funguje to.
Diky panove, spojil jsem oba prispevky a mam to
byte writeBit(byte origValue, byte bitValue, byte pos)
{
// vynulovat misto, kam bit prijde
origValue = (byte)(origValue & ~(1 << pos));
// zapsat bit
origValue = (byte)(origValue | (bitValue << pos));
return origValue;
}
Pánové přede mnou "vymýšlejí kolo"
C# má třídy na (skoro) všechno.
A ta pro tebe se jmenuje "Bit Array ":https://docs.microsoft.com/…ons.bitarray?…
Ale samozřejmě Lubošovo typicky Céčkové řešení funguje.
Zobrazeno 5 zpráv z 5.