Advertisement
Mateus_Costa

Bits

Mar 16th, 2017
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.82 KB | None | 0 0
  1. /*
  2.     Escrito por Mateus Costa
  3.     15/03/2017
  4. */
  5.  
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10.  
  11. // 1 bit
  12.  
  13. // Aguenta até 32 slots (0 - 31)
  14. // Valores inteiros suportados: 0 e 1
  15.  
  16. void setBit1(int *pInt32, int index, int valor)
  17. {
  18.     *pInt32 = (*pInt32 & ~(0x1 << index)) ^ (valor << index);
  19. }
  20.  
  21. int getBit1(int pInt32, int index)
  22. {
  23.     return ((pInt32 >> index) & 0x1);
  24. }
  25.  
  26. // 2 bits
  27.  
  28. // Aguenta até 16 slots (0 - 15)
  29. // Valor inteiro máximo suportado: 3
  30.  
  31. void setBit2(int *pInt32, int index, int valor)
  32. {
  33.     *pInt32 = (*pInt32 & ~(0x3 << index * 2)) ^ (valor << (index * 2));
  34. }
  35.  
  36. int getBit2(int pInt32, int index)
  37. {
  38.     return ((pInt32 >> (index * 2)) & 0x3);
  39. }
  40.  
  41. // 4 bits
  42.  
  43. // Aguenta até 8 slots (0 - 7)
  44. // Valor inteiro máximo suportado: 15
  45.  
  46. void setBit4(int *pInt32, int index, int valor)
  47. {
  48.     *pInt32 = (*pInt32 & ~(0xf << index * 4)) ^ (valor << (index * 4));
  49. }
  50.  
  51. int getBit4(int pInt32, int index)
  52. {
  53.     return ((pInt32 >> (index * 4)) & 0xf);
  54. }
  55.  
  56. // 8 bits
  57.  
  58. // Aguenta até 4 slots (0 - 3)
  59. // Valor inteiro máximo suportado: 255
  60.  
  61. void setBit8(int *pInt32, int index, int valor)
  62. {
  63.     *pInt32 = (*pInt32 & ~(0xff << index * 8)) ^ (valor << (index * 8));
  64. }
  65.  
  66. int getBit8(int pInt32, int index)
  67. {
  68.     return ((pInt32 >> (index * 8)) & 0xff);
  69. }
  70.  
  71. int main()
  72. {
  73.     // Exemplos
  74.  
  75.     int var = 0;
  76.  
  77.     setBit4(&var, 0, 14);
  78.     setBit4(&var, 1, 8);
  79.     setBit4(&var, 7, 15);
  80.     printf("%d\n", getBit4(var, 0)); // imprime 14
  81.     printf("%d\n", getBit4(var, 1)); // imprime 8
  82.     printf("%d\n", getBit4(var, 7)); // imprime 15
  83.     setBit4(&var, 0, 9);
  84.     setBit4(&var, 1, 11);
  85.     setBit4(&var, 7, 0);
  86.     printf("%d\n", getBit4(var, 0)); // imprime 9
  87.     printf("%d\n", getBit4(var, 1)); // imprime 11
  88.     printf("%d\n", getBit4(var, 7)); // imprime 0
  89.  
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement