Avatar billede Daniel.E Praktikant
23. maj 2005 - 11:03 Der er 10 kommentarer og
1 løsning

søger absolut slamkode

ok, selve mit spørgsmål skal nok udbedres lidt mere.  jeg er ved at lave en håndfuld guides, til forskellige sprog.

Lige nu er jeg nået i alfabetet til C....

jeg har brug for at "absolut slam kode", men det skal sadfølig virke efter hensigten. hehe

Så find nolge af dine gamle koder frem igen, og submit dem... hehe
Avatar billede arne_v Ekspert
23. maj 2005 - 11:11 #1
Avatar billede Daniel.E Praktikant
23. maj 2005 - 11:15 #2
ok.. det er godt nok slam kode.. hehe
Avatar billede Daniel.E Praktikant
23. maj 2005 - 13:55 #3
der må da være nogle flere som kender til noget slamkode...hehe
Avatar billede bertelbrander Novice
23. maj 2005 - 20:24 #4
Denne virker kun med g++ og Digital Mars:

#include <iostream>
int main(void)
{
  unsigned int f[] = {0x8BE58955, 0x45030C45, 0x90C35D08};
  int a = ((int (*)(int, int))f)(31, 11);
  std::cout << a << std::endl;
  return 0;
}
Avatar billede bertelbrander Novice
23. maj 2005 - 21:53 #5
Og et "lille" program til at lægge meget store tal sammen:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  if (argc != 3 || strlen(argv[1]) > 1000 || strlen(argv[2]) > 1000)
    return 1;
  argv[0] = (char *)calloc(127, 1);
  strcpy(argv[0], argv[1]);
  argv[1] = argv[0];
  memmove(&argv[1][1], argv[1], strlen(argv[1]) + 1);
  argv[1][0] = '0';
  argv[0] = (char *)calloc(127, 1);
  strcpy(argv[0], argv[2]);
  argv[2] = argv[0];
  memmove(&argv[2][1], argv[2], strlen(argv[2]) + 1);
  argv[2][0] = '0';
  argc = strlen(argv[1]) - strlen(argv[2]);
  if (argc > 0)
  {
    memmove(&argv[2][argc], argv[2], strlen(argv[2]) + 1);
    for (argv[0] = argv[2]; argc >= 0; argc--, argv[0]++)
      argv[0][0] = '0';
  }
  else if (argc < 0)
  {
    argc = -argc;
    memmove(&argv[1][argc], argv[1], strlen(argv[1]) + 1);
    for (argv[0] = argv[1]; argc >= 0; argc--, argv[0]++)
      argv[0][0] = '0';
  }
  argv[0] = (char *)calloc(127 + 2, 1);
  argv[0][0] = '0';
  for (argc = strlen(argv[1]) - 1; argc > 0; argc--)
  {
    argv[2][argc] -= '0';
    for (argv[0][127] = 0, argv[0][127 + 1] = 0; argv[0][127] < 8; argv[0][127]++)
    {
      argv[0][argc] |= ((argv[1][argc] & (1 << argv[0][127])) ^ (
                                        argv[2][argc] & (1 << argv[0][127])) ^ (argv[0][127 + 1] << argv[0][127]));
      argv[0][127 + 1] = !!(((argv[1][argc] & (1 << argv[0][127]))) &
                            ((argv[2][argc] & (1 << argv[0][127])))) |
        (argv[0][127 + 1] & (!!(((argv[1][argc] & (1 << argv[0][127]))) |
                                ((argv[2][argc] & (1 << argv[0][127]))))));
    }
    if (argv[0][argc] > '9')
    {
      argv[0][argc] -= 10;
      argv[0][argc - 1]++;
    }
  }
  if (argv[0][0] == '0')
    printf("\n%s\n", &argv[0][1]);
  else
    printf("\n%s\n", argv[0]);
  return 0;
}
Avatar billede Daniel.E Praktikant
24. maj 2005 - 10:03 #6
jeg har godt nok aldrig set så meget slam i samme spørgsmål.. hehe :)

Det ser godt ud bertelbrander... :)
Avatar billede bertelbrander Novice
24. maj 2005 - 19:53 #7
Der er måske nogen der ikke forstår denne:

unsigned int f[] = {0x8BE58955, 0x45030C45, 0x90C35D08}
int a = ((int (*)(int, int))f)(31, 11);

Det der sker er at f bliver castet til en funktions pointer, og denne funktion bliver kaldt med argumenterne 31 og 11. a bliver tilskrevet returværdien fra funktionen.
Enhver der kan et minimum af assembler kan se at "funktionen" retunerer summen af de to tal. a bliver derfor 42.
Avatar billede Daniel.E Praktikant
27. maj 2005 - 09:18 #8
bertelbrander >> Jeg har aldrig set så meget slam på en side.. heheh :)

Det er lige hvad jeg har brug for, nok skal jeg pille lidt ved det, men så kan jeg få nolge sjove timer til at gå med find+replace.

bertelbrander er du stadigvæk på diæt ??

Arne_v du må gerne smide et svar
Avatar billede arne_v Ekspert
27. maj 2005 - 09:37 #9
ok
Avatar billede bertelbrander Novice
27. maj 2005 - 20:40 #10
Jeg samler stadig ikke på point.
Avatar billede Daniel.E Praktikant
30. maj 2005 - 08:49 #11
bertelbrander >> Tak for hjælpen, det bliver renere og renere ;)

Arne_v >> Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester