#include #include /* * Diese Funktion gibt einen positiven 16Bit Integer * in Binardarstellung aus. * * Bsp.: * 73 => 00000000 01001001 * */ void print_bin_short(unsigned short int a) { unsigned short int high_one = 32768; //2^15 short int i; for( i = 0; i < 16; i++ ) { if( a & high_one ) { printf("1"); } else { printf("0"); } if( i == 7 ) { printf(" "); } a <<= 1; } printf("\n"); } /* * gcc -Wall -std=c99 stat.c -o stat */ int main(int argc, char **argv) { short int mode; short int newmode; //Einlesen printf("Geben sie eine Berechtigung ein: "); if( scanf("%hd", &mode) != 1 ) { return 1; } //Ausgeben in Binaer printf("Modus: "); print_bin_short(mode); //modus merken newmode = mode; //Die einzelnen Modi abfragen if( mode & 1 ) { printf("ALLE\tausfuehren\n"); } if( mode & 2 ) { printf("ALLE\tschreiben\n"); } if( mode & 4 ) { printf("ALLE\tlesen\n"); } if( mode & 8 ) { printf("GRUPPE\tausfuehren\n"); } if( mode & 16 ) { printf("GRUPPE\tschreiben\n"); } if( mode & 32 ) { printf("GRUPPE\tlesen\n"); } if( mode & 64 ) { printf("NUTZER\tausfuehren\n"); } else { printf("NUTZER\tausfuehren setzen\n"); newmode |= 64; } if( mode & 128 ) { printf("NUTZER\tschreiben\n"); } if( mode & 256 ) { printf("NUTZER\tlesen\n"); } else { printf("NUTZER\tlesen setzen\n"); newmode |= 256; } //Falls etwas geaendert wurde if( mode != newmode ) { printf("Modus: "); print_bin_short(newmode); } return 0; }