/* operazioni con i singoli bit */ #include int main() { int i; unsigned char a=0, b, c, d; printf("a = %u [0x%X] \n", a, a); puts("\n Ci mettiamo 1"); a = 1; printf("a = %u [0x%X] \n", a, a); a = 1; puts("\n spostiamo il primo bit a sinistra 7 volte"); for (i=0; i<7; i++) { a = a << 1; printf("a = %3u [0x%2X] \n", a, a); } //---------------------------------------------------- puts("\n Settiamo tutti i bit a 1"); a = 0b11111111; printf("a = %3u [0x%X] \n", a, a); puts("\n definiamo altre due variabili con 4 bit ON"); b = 0b00001111; printf("b = %3u [0x%2X] \n", b, b); c = 0b11110000; printf("c = %3u [0x%2X] \n", c, c); puts("\nOra facciamo AND e OR fra le variabili"); printf("b | c = %3u [0x%2X] \n", b|c, b|c); printf("b & c = %3u [0x%2X] \n", b&c, b&c); printf("a & b = %3u [0x%2X] \n", a&b, a&b); printf("a & c = %3u [0x%2X] \n", a&c, a&c); printf("a | b = %3u [0x%2X] \n", a|b, a|b); printf("a | c = %3u [0x%2X] \n", a|c, a|c); puts("\nFacciamo anche qualche XOR"); printf("b ^ c = %3u [0x%2X] \n", b^c, b^c); printf("a ^ b = %3u [0x%2X] \n", a^b, a^b); printf("a ^ c = %3u [0x%2X] \n", a^c, a^c); puts("\nNegazioni"); printf("~a = %3u [0x%2X] \n", (unsigned char) ~a, (unsigned char) ~a); printf("~b = %3u [0x%2X] \n", (unsigned char) ~b, (unsigned char) ~b); printf("~c = %3u [0x%2X] \n", (unsigned char) ~c, (unsigned char) ~c); printf("~(~a) = %3u [0x%2X] \n", (unsigned char) ~(~a), (unsigned char) ~(~a)); printf("~0b10000001 = %3u [0x%2X] \n", (unsigned char) ~0b10000001, (unsigned char) ~0b10000001); puts("\nAltri esempi di shift"); printf("b << 4; %3u [0x%2X] \n", (unsigned char)b<<4, (unsigned char)b<<4); printf("c >> 4; %3u [0x%2X] \n", (unsigned char)c>>4, (unsigned char)c>>4); d = b << 6; printf("d = (b << 6); %3u [0x%2X] \n", (unsigned char) d, (unsigned char) d); printf("d >> 6; %3u [0x%2X] \n", (unsigned char) d>>6, (unsigned char) d>>6); puts("\n(i bit persi... sono persi)"); return 0; }