Zanegowanie jednego bitu bez przenoszenia.

0

Witam,
Mam następujący problem w C++. Mam liczbę, niech to będzie 8 bitowy ciąg bitów w typie char (byte). Do dostania się do konkretnego bitu używam konkretnej maski np. 00000100.

Problem:
Zamienić bit na danej pozycji na przeciwny. Maska pozwala mi się dostać do jednego z tych operatorów.

Idealnym rozwiązaniem byłaby negacja tylko na konkretnym bicie, na którym mam maskę, ale operator tego nie obsługuje tzn. mam tylko operator negacji bitowej, który neguje całą liczbę, a nie o to chodzi.

0

uzyj xor

0

wziĄłem kartkę.. i to jest to, suma modulo 2, dzięki!

3
lipaa napisał(a):

wziĄłem kartkę.. i to jest to, suma modulo 2, dzięki!
?
Użyj xor jak @krwq podpowiada, to jest właśnie negowanie tych bitów, które są zapalone w masce:

bity = 15; // bity do modyfikacji (1111)
pozycja = 0; // pozycja bitu do zanegowania
maska = 1 << pozycja; // maska bitowa z zapalonym bitem na zadanej pozycji (0001)
wynik = bity ^ maska; // negujemy bit xor'ując maską (1111 ^ 0001 = 1110)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0