Hola Miquel_s.
¿Porque a = 0x43 y k no varia?
porque estás asignando a la variable a el resultado de sumar a+k. Y k no se altera.
Para que la variable k cambie deberías igualarla a algo. Para que se le asigne un valor. Por ejemplo k=1;
El operador AND "&" compara dos bits; si los dos son 1 el resultado es 1, en otro caso el resultado será 0.
Para aprender mejor los operadores a nivel de bits te recomiendo que trabajes en formato binario. Así ves mas claras las cosas y los cambios que se hacen.
El operador AND funciona como un colador que deja pasar únicamente los bits que están en uno.
k = 0xA5=10100101
a = 0xA0=10100000
-------------------------
k & a =10100000
( en este ejemplo dejó pasar únicamente los bits 7 y 5)
otro Ejemplo:
c1 = 0x45 --> 01000101
c2 = 0x71 --> 01110001
---------------------------
c1 & c2 = 0x41 --> 01000001
El operador OR "|" compara dos bits; si cualquiera de los dos bits es 1, entonces el resultado es 1; en otro caso será 0. Ejemplo:
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
---------------------------
i1 | i2 = 0x57 --> 01010111
Para convertir los números de hexadecimal a binario podés usar la calculadora de windows en modo científico o programador (windows 7) y listo. o usá
http://easycalculation.com/hex-converter.php Saludos.
Jukinch