Newer
Older
src / c / c-tutorial / bitops.c
#include <stdio.h>
#define BYTE unsigned char

/* Funkton Bit_Test()
 * val = der Wert, den es zu testen gilt
 * bit = Bitnummer, die abgefragt wird ob gesetzt (0-7)
 *
 * Rückgabewert =  (1) = Bit gesetzt; (0) = Bit nicht gesetzt
 */

int Bit_Test(BYTE val, BYTE bit) {
	BYTE test_val = 0x01;
	/* Bit an entsprechende Position schieben */
	test_val = (test_val << bit);
	if ((val & test_val) == 0) {
		return 0;
	} else {
		return 1;
	}
}

/* Funktion Bit_Set()
 * val = Wert, bei dem Bit gesetzt werden soll
 * bit = Bitnummer, die gesetzt werden soll (0-7)
 *
 * Rückgabewert = keiner
 */

void Bit_Set(BYTE *val, BYTE bit) {
	BYTE test_val = 0x01;
	/* Bit an entsprechende Position schieben */
	test_val = (test_val << bit);
	*val = (*val | test_val);
}

/* Funktion Bit_Clear()
 * val = Wert, bei dem Bit gelöscht werden soll
 * bit = Bitnummer, die gelöscht werden soll (07-7)
 *
 * Rückgabewert = keiner
 */

void Bit_Clear(BYTE *val, BYTE bit) {
	BYTE test_val = 0x01;
	/* Bit an entsprechende Position schieben */
	test_val = (test_val << bit);
	*val = (*val & (~test_val));
}

int main() {
	BYTE wert = 0;
	printf("%s\n", Bit_Test(wert, 0)?"gesetzt":"nicht gesetzt");
	Bit_Set(&wert, 0);
	printf("%s\n", Bit_Test(wert, 0)?"gesetzt":"nicht gesetzt");
	Bit_Clear(&wert, 0);
	printf("%s\n", Bit_Test(wert, 0)?"gesetzt":"nicht gesetzt");

	return 0;
}