/** * @title: bitwise.cpp * @date: 2004.09.01 - 5:05 am * @author: vinnie * @ source for bitwise.exe */ #include #include #include #include unsigned char* myAnd( unsigned char *s1, unsigned char *s2) { unsigned static char res[32]; memset( res, 0x0000, 33); memset( res, 0x0030, 32); for ( int i = 0; i < 32; i++) if ( s1[i] == '1' && s2[i] == '1') res[i] = '1'; return res; } unsigned char* myOr( unsigned char *s1, unsigned char *s2) { unsigned static char res[32]; memset( res, 0x0000, 33); memset( res, 0x0030, 32); for ( int i = 0; i < 32; i++) if ( (s1[i] == '0' && s2[i] == '1') || (s1[i] == '1' && s2[i] == '0') || (s1[i] == '1' && s2[i] == '1') ) res[i] = '1'; return res; } unsigned char* myXor( unsigned char *s1, unsigned char *s2) { unsigned static char res[32]; memset( res, 0x0000, 33); memset( res, 0x0030, 32); for ( int i = 0; i < 32; i++) if ( (s1[i] == '0' && s2[i] == '1') || (s1[i] == '1' && s2[i] == '0') ) res[i] = '1'; return res; } void main( ) { unsigned char ac1[33], ac2[33]; system("color 47"); BEGIN: memset( ac1, 0x0000, 33); memset( ac2, 0x0000, 33); memset( ac1, 0x0030, 32); memset( ac2, 0x0030, 32); system("cls"); printf( " Max. 32 bits strings !!\n\n Insert the 1st number: "); gets( (char*)ac1); printf( "\n Insert the 2nd number: "); gets( (char*) ac2); int len1 = strlen( (const char*) ac1); int len2 = strlen( (const char*) ac2); int i=0; for ( i = len1; i < 32; i++) ac1[i] = '0'; for ( i = len2; i < 32; i++) ac2[i] = '0'; unsigned char ac3[33], ac4[33]; memset( ac3, 0x0000, 33); memset( ac4, 0x0000, 33); memset( ac3, 0x0030, 32); memset( ac4, 0x0030, 32); int s = 0; int d = 32 - len1; for ( ; d < 32; d++, s++ ) ac3[d] = ac1[s]; s = 0; d = 32 - len2; for ( ; d < 32; d++, s++ ) ac4[d] = ac2[s]; gotoxy( 6, 7); printf(" %s", ac3); gotoxy( 6, 8); printf(" %s", ac4); // ============================== // AND unsigned char res[32]; memset( res, 0x0000, 33); memset( res, 0x0030, 32); unsigned char *p = myAnd( ac3, ac4); for ( int i = 0; i < 32; i++) res[i] = *( p + i); gotoxy( 3, 10); printf("AND %s", res); // ================================= // OR memset( res, 0x0000, 33); memset( res, 0x0030, 32); p = myOr( ac3, ac4); for ( int i = 0; i < 32; i++) res[i] = *( p + i); gotoxy( 4, 11); printf("OR %s", res); // ================================= // XOR memset( res, 0x0000, 33); memset( res, 0x0030, 32); p = myXor( ac3, ac4); for ( i = 0; i < 32; i++) res[i] = *( p + i); gotoxy( 3, 12); printf("XOR %s", res); // ================================= unsigned char answer; printf("\n\n Another one? [Y/y/N/n] "); answer = getchar(); if ( answer == 89 || answer == 121 ) goto BEGIN; system("color 0f"); }