ابزار کاربر

ابزار سایت


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

به جز مواردی که ذکر می‌شود، مابقی محتویات ویکی تحت مجوز زیر می‌باشند: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki