Buckstabue, это потому, что:
7: 111
1 << 2: 100
1 ^ 1 = 0
1 ^ 0 = 1
а вот есть 8 введете, то удивитесь
Добавлено через 11 минут
C++ |
1
2
3
4
5
6
7
8
9
10
11
| template <typename Type> Type Invert(Type val, int n)
{
unsigned char *ptr = (unsigned char*)&val;
if((ptr[n/8] >> n%8) == 1)
{
ptr[n/8] -= 1 << n%8;
} else {
ptr[n/8] += 1 << n%8;
}
return val;
} |
|
Добавлено через 1 минуту
PS: биты начинают отсчет с 0.