c-programming:math:twos-complement
فهرست مندرجات
مکمل دو
twos-complement-01.c
// gcc -Wall -Wextra -Werror -pedantic -std=c99 twos-complement-01.c #include <stdio.h> struct bits { unsigned char b0:1; unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; }; union byte { char c; struct bits b; }; void showbin(union byte ch, char *s) { snprintf(s, 9, "%d%d%d%d%d%d%d%d", ch.b.b7, ch.b.b6, ch.b.b5, ch.b.b4, ch.b.b3, ch.b.b2, ch.b.b1, ch.b.b0); } int main(void) { char p[9], n[9]; union byte ch; for(int i = 0; i < 128; i++) { ch.c = i; showbin(ch, p); ch.c = -1 * i; showbin(ch, n); printf("%3d: %s , %4d: %s\n", i, p, -1*i ,n); } return 0; }
0: 00000000 , 0: 00000000 1: 00000001 , -1: 11111111 2: 00000010 , -2: 11111110 3: 00000011 , -3: 11111101 4: 00000100 , -4: 11111100 5: 00000101 , -5: 11111011 6: 00000110 , -6: 11111010 7: 00000111 , -7: 11111001 8: 00001000 , -8: 11111000 9: 00001001 , -9: 11110111 10: 00001010 , -10: 11110110 11: 00001011 , -11: 11110101 12: 00001100 , -12: 11110100 13: 00001101 , -13: 11110011 14: 00001110 , -14: 11110010 15: 00001111 , -15: 11110001 16: 00010000 , -16: 11110000 17: 00010001 , -17: 11101111 18: 00010010 , -18: 11101110 19: 00010011 , -19: 11101101 20: 00010100 , -20: 11101100 21: 00010101 , -21: 11101011 22: 00010110 , -22: 11101010 23: 00010111 , -23: 11101001 24: 00011000 , -24: 11101000 25: 00011001 , -25: 11100111 26: 00011010 , -26: 11100110 27: 00011011 , -27: 11100101 28: 00011100 , -28: 11100100 29: 00011101 , -29: 11100011 30: 00011110 , -30: 11100010 31: 00011111 , -31: 11100001 32: 00100000 , -32: 11100000 33: 00100001 , -33: 11011111 34: 00100010 , -34: 11011110 35: 00100011 , -35: 11011101 36: 00100100 , -36: 11011100 37: 00100101 , -37: 11011011 38: 00100110 , -38: 11011010 39: 00100111 , -39: 11011001 40: 00101000 , -40: 11011000 41: 00101001 , -41: 11010111 42: 00101010 , -42: 11010110 43: 00101011 , -43: 11010101 44: 00101100 , -44: 11010100 45: 00101101 , -45: 11010011 46: 00101110 , -46: 11010010 47: 00101111 , -47: 11010001 48: 00110000 , -48: 11010000 49: 00110001 , -49: 11001111 50: 00110010 , -50: 11001110 51: 00110011 , -51: 11001101 52: 00110100 , -52: 11001100 53: 00110101 , -53: 11001011 54: 00110110 , -54: 11001010 55: 00110111 , -55: 11001001 56: 00111000 , -56: 11001000 57: 00111001 , -57: 11000111 58: 00111010 , -58: 11000110 59: 00111011 , -59: 11000101 60: 00111100 , -60: 11000100 61: 00111101 , -61: 11000011 62: 00111110 , -62: 11000010 63: 00111111 , -63: 11000001 64: 01000000 , -64: 11000000 65: 01000001 , -65: 10111111 66: 01000010 , -66: 10111110 67: 01000011 , -67: 10111101 68: 01000100 , -68: 10111100 69: 01000101 , -69: 10111011 70: 01000110 , -70: 10111010 71: 01000111 , -71: 10111001 72: 01001000 , -72: 10111000 73: 01001001 , -73: 10110111 74: 01001010 , -74: 10110110 75: 01001011 , -75: 10110101 76: 01001100 , -76: 10110100 77: 01001101 , -77: 10110011 78: 01001110 , -78: 10110010 79: 01001111 , -79: 10110001 80: 01010000 , -80: 10110000 81: 01010001 , -81: 10101111 82: 01010010 , -82: 10101110 83: 01010011 , -83: 10101101 84: 01010100 , -84: 10101100 85: 01010101 , -85: 10101011 86: 01010110 , -86: 10101010 87: 01010111 , -87: 10101001 88: 01011000 , -88: 10101000 89: 01011001 , -89: 10100111 90: 01011010 , -90: 10100110 91: 01011011 , -91: 10100101 92: 01011100 , -92: 10100100 93: 01011101 , -93: 10100011 94: 01011110 , -94: 10100010 95: 01011111 , -95: 10100001 96: 01100000 , -96: 10100000 97: 01100001 , -97: 10011111 98: 01100010 , -98: 10011110 99: 01100011 , -99: 10011101 100: 01100100 , -100: 10011100 101: 01100101 , -101: 10011011 102: 01100110 , -102: 10011010 103: 01100111 , -103: 10011001 104: 01101000 , -104: 10011000 105: 01101001 , -105: 10010111 106: 01101010 , -106: 10010110 107: 01101011 , -107: 10010101 108: 01101100 , -108: 10010100 109: 01101101 , -109: 10010011 110: 01101110 , -110: 10010010 111: 01101111 , -111: 10010001 112: 01110000 , -112: 10010000 113: 01110001 , -113: 10001111 114: 01110010 , -114: 10001110 115: 01110011 , -115: 10001101 116: 01110100 , -116: 10001100 117: 01110101 , -117: 10001011 118: 01110110 , -118: 10001010 119: 01110111 , -119: 10001001 120: 01111000 , -120: 10001000 121: 01111001 , -121: 10000111 122: 01111010 , -122: 10000110 123: 01111011 , -123: 10000101 124: 01111100 , -124: 10000100 125: 01111101 , -125: 10000011 126: 01111110 , -126: 10000010 127: 01111111 , -127: 10000001
twos-complement-02.c
// gcc -Wall -Wextra -Werror -pedantic -std=c99 twos-complement-02.c #include <stdio.h> struct bits { unsigned char b0:1; unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; }; union byte { char c; struct bits b; }; void showbin(union byte ch, char *s) { snprintf(s, 9, "%d%d%d%d%d%d%d%d", ch.b.b7, ch.b.b6, ch.b.b5, ch.b.b4, ch.b.b3, ch.b.b2, ch.b.b1, ch.b.b0); } int main(void) { union byte ch; char str[9]; for(int i = 0; i < 32; i++) { for (int j = 0; j < 256 ; j += 32) { ch.c = i + j; showbin(ch, str); printf("%4d: %s\t", ch.c , str); } printf("\n"); } return 0; }
0: 00000000 32: 00100000 64: 01000000 96: 01100000 -128: 10000000 -96: 10100000 -64: 11000000 -32: 11100000 1: 00000001 33: 00100001 65: 01000001 97: 01100001 -127: 10000001 -95: 10100001 -63: 11000001 -31: 11100001 2: 00000010 34: 00100010 66: 01000010 98: 01100010 -126: 10000010 -94: 10100010 -62: 11000010 -30: 11100010 3: 00000011 35: 00100011 67: 01000011 99: 01100011 -125: 10000011 -93: 10100011 -61: 11000011 -29: 11100011 4: 00000100 36: 00100100 68: 01000100 100: 01100100 -124: 10000100 -92: 10100100 -60: 11000100 -28: 11100100 5: 00000101 37: 00100101 69: 01000101 101: 01100101 -123: 10000101 -91: 10100101 -59: 11000101 -27: 11100101 6: 00000110 38: 00100110 70: 01000110 102: 01100110 -122: 10000110 -90: 10100110 -58: 11000110 -26: 11100110 7: 00000111 39: 00100111 71: 01000111 103: 01100111 -121: 10000111 -89: 10100111 -57: 11000111 -25: 11100111 8: 00001000 40: 00101000 72: 01001000 104: 01101000 -120: 10001000 -88: 10101000 -56: 11001000 -24: 11101000 9: 00001001 41: 00101001 73: 01001001 105: 01101001 -119: 10001001 -87: 10101001 -55: 11001001 -23: 11101001 10: 00001010 42: 00101010 74: 01001010 106: 01101010 -118: 10001010 -86: 10101010 -54: 11001010 -22: 11101010 11: 00001011 43: 00101011 75: 01001011 107: 01101011 -117: 10001011 -85: 10101011 -53: 11001011 -21: 11101011 12: 00001100 44: 00101100 76: 01001100 108: 01101100 -116: 10001100 -84: 10101100 -52: 11001100 -20: 11101100 13: 00001101 45: 00101101 77: 01001101 109: 01101101 -115: 10001101 -83: 10101101 -51: 11001101 -19: 11101101 14: 00001110 46: 00101110 78: 01001110 110: 01101110 -114: 10001110 -82: 10101110 -50: 11001110 -18: 11101110 15: 00001111 47: 00101111 79: 01001111 111: 01101111 -113: 10001111 -81: 10101111 -49: 11001111 -17: 11101111 16: 00010000 48: 00110000 80: 01010000 112: 01110000 -112: 10010000 -80: 10110000 -48: 11010000 -16: 11110000 17: 00010001 49: 00110001 81: 01010001 113: 01110001 -111: 10010001 -79: 10110001 -47: 11010001 -15: 11110001 18: 00010010 50: 00110010 82: 01010010 114: 01110010 -110: 10010010 -78: 10110010 -46: 11010010 -14: 11110010 19: 00010011 51: 00110011 83: 01010011 115: 01110011 -109: 10010011 -77: 10110011 -45: 11010011 -13: 11110011 20: 00010100 52: 00110100 84: 01010100 116: 01110100 -108: 10010100 -76: 10110100 -44: 11010100 -12: 11110100 21: 00010101 53: 00110101 85: 01010101 117: 01110101 -107: 10010101 -75: 10110101 -43: 11010101 -11: 11110101 22: 00010110 54: 00110110 86: 01010110 118: 01110110 -106: 10010110 -74: 10110110 -42: 11010110 -10: 11110110 23: 00010111 55: 00110111 87: 01010111 119: 01110111 -105: 10010111 -73: 10110111 -41: 11010111 -9: 11110111 24: 00011000 56: 00111000 88: 01011000 120: 01111000 -104: 10011000 -72: 10111000 -40: 11011000 -8: 11111000 25: 00011001 57: 00111001 89: 01011001 121: 01111001 -103: 10011001 -71: 10111001 -39: 11011001 -7: 11111001 26: 00011010 58: 00111010 90: 01011010 122: 01111010 -102: 10011010 -70: 10111010 -38: 11011010 -6: 11111010 27: 00011011 59: 00111011 91: 01011011 123: 01111011 -101: 10011011 -69: 10111011 -37: 11011011 -5: 11111011 28: 00011100 60: 00111100 92: 01011100 124: 01111100 -100: 10011100 -68: 10111100 -36: 11011100 -4: 11111100 29: 00011101 61: 00111101 93: 01011101 125: 01111101 -99: 10011101 -67: 10111101 -35: 11011101 -3: 11111101 30: 00011110 62: 00111110 94: 01011110 126: 01111110 -98: 10011110 -66: 10111110 -34: 11011110 -2: 11111110 31: 00011111 63: 00111111 95: 01011111 127: 01111111 -97: 10011111 -65: 10111111 -33: 11011111 -1: 11111111
c-programming/math/twos-complement.txt · آخرین ویرایش: 2024/04/19 17:50 توسط pejman
