fork download
  1. #include <iostream>
  2. #include <bitset>
  3.  
  4. using namespace std;
  5.  
  6. typedef struct CACHE {
  7. unsigned int lineSize;
  8. unsigned int associativity;
  9. unsigned int numLines;
  10. } CACHE;
  11.  
  12. unsigned int log2(unsigned int x) {
  13. unsigned int resultado = 0;
  14. while (x >>= 1) resultado++;
  15. return resultado;
  16. }
  17.  
  18. int main() {
  19. unsigned long long int address = 0x123456789ABCDEFLL;
  20. CACHE cacheconfig;
  21. cacheconfig.lineSize = 20;
  22. cacheconfig.numLines = 200;
  23. cacheconfig.associativity = 4;
  24.  
  25. string binario = bitset<256>(address).to_string();
  26. int InicioDado = 256-log2(cacheconfig.lineSize);
  27. string dado = binario.substr(InicioDado, log2(cacheconfig.lineSize));
  28. int InicioIndex = InicioDado-log2(cacheconfig.numLines/cacheconfig.associativity);
  29. string index = binario.substr(InicioIndex ,log2(cacheconfig.numLines/cacheconfig.associativity));
  30. int InicioTag = 256-cacheconfig.lineSize;
  31. string tag = binario.substr(InicioTag, 256-InicioTag-log2(cacheconfig.lineSize));
  32. long unsigned int Tag = bitset<256>(tag).to_ulong();
  33. long unsigned int Index = bitset<256>(index).to_ulong();
  34. long unsigned int Dado = bitset<256>(dado).to_ulong();
  35.  
  36. printf("%lu,%lu,%lu", Tag, Index, Dado);
  37. return 0;
  38. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
48350,30,15