SHARE
TWEET

Untitled

a guest Oct 23rd, 2019 108 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char* decimal_to_binary(unsigned short int);
  5. char* decimal_to_binary_dvojkovy_doplnek(short int);
  6.  
  7. int main(void)
  8. {
  9.     unsigned short int n1 = 255;
  10.     short int n2 = -1;
  11.  
  12.     char* str1 = decimal_to_binary(n1);
  13.     char* str2 = decimal_to_binary_dvojkovy_doplnek(n2);
  14.    
  15.     printf("Reprezentace cisla n(%d) v binarnim vyjadreni 8 bitu je %s\n", n1, str1);
  16.     printf("Reprezentace cisla n(%d) v binarnim vyjadreni 8 bitu s dvojkovym doplnkem je %s", n2, str2);
  17.  
  18.     return 0;
  19. }
  20.  
  21. // klasický převod
  22. char* decimal_to_binary(unsigned short int n)
  23. {
  24.     // alokuje se paměť pro 9 charů -> 8 nul a jedniček, poslední znak je ukončovací ('\0')
  25.     char* str = (char*)malloc(sizeof(char) * (8 + 1));
  26.  
  27.     // kód se provede pouze, pokud se podaří alokovat paměť pro pole charů str
  28.     if (str != NULL)
  29.     {
  30.         int count = 0;
  31.         int d;
  32.         for (int i = 7; i >= 0; i--)
  33.         {
  34.             // bitovým posunem doprava o i se zjistí, jaká hodnota je na i-té číslici binární reprezentace čísla
  35.             d = n >> i;
  36.  
  37.             // ternárním operátorem se do pole charů uloží 0, nebo 1
  38.             (d & 1) ? str[count] = '1' : str[count] = '0';
  39.  
  40.             count++;
  41.         }
  42.  
  43.         // ukončíme string
  44.         str[count] = '\0';
  45.  
  46.         return str;
  47.     }
  48. }
  49.  
  50. // převod do dvojkového doplňku
  51. char* decimal_to_binary_dvojkovy_doplnek(short int n)
  52. {
  53.     // alokuje se paměť pro 9 charů -> 8 nul a jedniček, poslední znak je ukončovací ('\0')
  54.     char* str = (char*)malloc(sizeof(char) * (8 + 1));
  55.  
  56.     // znegujeme každý bit v binární reprezentaci čísla n, přičteme jedničku -> takto vznikne dvojkový doplňek
  57.     ~n + 1;
  58.    
  59.     // kód se provede pouze, pokud se podaří alokovat paměť pro pole charů str
  60.     if (str != NULL)
  61.     {
  62.         int count = 0;
  63.         int d;
  64.         for (int i = 7; i >= 0; i--)
  65.         {
  66.             // bitovým posunem doprava o i se zjistí, jaká hodnota je na i-té číslici binární reprezentace čísla
  67.             d = n >> i;
  68.  
  69.             // ternárním operátorem se do pole charů uloží 0, nebo 1
  70.             (d & 1) ? str[count] = '1' : str[count] = '0';
  71.  
  72.             count++;
  73.         }
  74.  
  75.         // ukončíme string
  76.         str[count] = '\0';
  77.  
  78.         return str;
  79.     }
  80. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top