Avatar billede shjtip Nybegynder
21. september 1999 - 19:36 Der er 14 kommentarer og
1 løsning

binær værdi af et tal.

Jeg har et tal der repræsentere en dato
210999, dens binære værdi ved jeg er
36423, men hvordan finder man den binære værdi af et tal. Hvis nogen af jer også ved hvordan/eller om det kan gøres i vba ville det være fint, ellers laver jeg sgu bare en lille exe i c++
Hilsen Simon
Avatar billede 127144146281 Nybegynder
21. september 1999 - 22:15 #1
lav da en dll fil som du kan kalde fra dit VB prog. (bare en ide), da det ser mere prof ud, og er lidt hurtigere at afvikle
Avatar billede 127144146281 Nybegynder
21. september 1999 - 22:17 #2
>>shjtip  er den binære værdi ikke: 110011100000110111  ?
Avatar billede shj Nybegynder
21. september 1999 - 23:58 #3
hmmmm problemet er at tallet 210999 skal repræsentere en værdi der hedder 36423, når der så bliver når tallert så bliver 220999 skal værdien stige med en!
Det er muligrt at det er en algoritme jeg mangler og ikke en eller anden værdi
Avatar billede soepro Nybegynder
22. september 1999 - 09:06 #4
Hvad pokker mener du med tallets binære værdi ??? Binært betyder to-tals system, så den binære værdi er noget i stil med hvad 127144146281 skriver ovenfor.

Er ønsket at du regner datoen om til en eller anden "fast" værdi, sådan at du kan lave alm. udregninger med + og - til en dato ??? I så fald HAR jeg en løsning.
Avatar billede bjarke Nybegynder
22. september 1999 - 09:10 #5
Det er altså hex-værdien!

  3*16^0    =    48
+ 2*16^1    =    512
+ 4*16^2          ...
+ 6*16^3
+ 3*16^4
---------------------
=            210.999

Skal du stadig vide, hvordan man omregner til binært, eller skal du så have omregnet til hex???
Avatar billede snowball Novice
22. september 1999 - 09:20 #6
Hhhhmmm...Det er godt nok lige lidt off-topic, men er shjtip og shj den samme person ?

Snowball
Avatar billede kko Nybegynder
22. september 1999 - 09:21 #7
Så vidt jeg kan se, så er det en datorutine du skal have fat i I VBA lagres alle dato og klokkeslet i et heltal. Prøv du at kigge på datorutinerne. Når du lagrer en dato i en variant type kan du se integer værdien.

mvh
klaus
Avatar billede shj Nybegynder
22. september 1999 - 10:09 #8
Hej alle! jeg er klar over hvad binært betyder, men på det mainfraime anlæg jeg arbejder med til daglig, er der en funktion man kan bruge til omregning af dato til en tal værdi. Vi har på vores system en såkaldt "juliant date" det vil sige at . feks 210999 har en værdi der hedder 36423, hvis man så trækker 32957 som er starværdien for datosystemet fra, for man det tal jeg skal bruge, nemlig 3466, som er juliant date. Mit spørgsmål vedr. binært er fordi at funktioenen i en sql query stod som juliantdate=datevalue(date()-32957)denne query er taget fra en access database. håber i måske bedre forstår mit spørgsmål nu.
ps. shjtip er når jeg er på arbejde
shj er privat hjemmefra.
Avatar billede shj Nybegynder
22. september 1999 - 10:11 #9
til Bjarke noget kunne tyde på at du har ret i at det er hexværdien jeg leder efter. please hvordan regner man så denne værdi ud for idag .feks 
220999? bare lgie et hint ville være dejligt
Avatar billede soepro Nybegynder
22. september 1999 - 10:14 #10
Hvis du skal kunne regne & sammenligne på datoerne, kan du ikke lagre dem på formatet DMY (dag, måned, år) men SKAL derimod lagre dem på formatet CYMD (År inkl. århundre, måned & dag). Ser du - hvis du sammenligner 200999 med 191099, ja så er datoen i september jo størst, selvom datoen i oktober jo rent logisk kommer efter. Vender du den om, altså 19990920 og 19991019, så bliver checket korrekt.

Hvis du skal regne frem og tilbage på datoerne er det nemmeste at lave rutiner til dette (VBA syntaksen kender jeg ikke, men det skulle vel være en smal sag at oversætte C til BASIC):

inline int LeapYearAdjust(int Year)
{
  if ((Year % 4) == 0)
    /* Leap year. */
    return 29;

  return 28;
};

/*****************************************/
  ulong MakeDate(ulong Date, int NewDays)
/*****************************************/
{
  /*                Setoff, Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Oct,Nov,Dec. */
  int MaxDay[13] = {  0    , 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  int Year, Month, Day;
  /* Extract day from date and in-/decrease it. */
  Year  = (int)(Date / 10000L);
  Month = (int)(Date % 10000L) / 100;
  Day  = (int)(Date % 100) + NewDays;
  MaxDay[2] = LeapYearAdjust(Year);

  /* If new date smaller than 1, select previous month, if greater */
  /* than max date in month, selected next month.                  */
  if (Day < 1)
  { /* Older date. */
    while (Day < 1)
    {
      Month--;
      if (Month < 1)
      {
        Year--;
        Month = 12;
        MaxDay[2] = LeapYearAdjust(Year);
      };
      Day += MaxDay[Month]; /* Add last date of previous month. */
    };
  } /* Older date. */
  else
  { /* Newer date. */
    while (Day > MaxDay[Month])
    {
      Day -= MaxDay[Month]; /* Subtract max date of current month. */
      if ((++Month) > 12)
      {
        Year++;
        Month = 1;
        MaxDay[2] = LeapYearAdjust(Year);
      };
    };
  }; /* Newer date. */

  return (long)(Year * 10000L + Month * 100 + Day);
} /* MakeDate */
Avatar billede soepro Nybegynder
22. september 1999 - 10:44 #11
For at få hex-værdien for idag, skal du først regne dagsdato om til julian date, helt analogt til d.o.:

int juliandate(int dato)
{
  int maxDay[13] = { 0, 0, 31, 59, 90, 120, 151, 181, 212,
                              243, 273, 304, 334 };
  int year    = dato / 10000;
  int month = (dato % 10000) / 100;
  int day    = dato / 100;
  maxDay[2] = LeapYearAdjust(year);

  return year * 10000 + maxDay[month] + day;
}

herefter sender du den bare igennem sprintf(sqltext, "%0X", juliandate(dato)).
Hvis du også skal lave det selv, kan du f.eks. gøre det sådan her:

char * inttohex(int val)
{  // Static for at gøre den hurtigere, da den sikkert bliver kaldt flere gange.
  static char str[21];
  static int idx, tmpval;
  idx = 0; tmpval = val;
  while (tmpval)
  {
    if ((tmpval % 16) > 10)
      str[idx] = 'A' + (tmpval % 16) - 10;
    else
      str[idx] = '0' + (tmpval % 16);
    idx++;
    tmpval /= 16;
  };
  if (idx > 0)
  {
    str[idx] = '\x0';
    return str;
  }
  else
    return "0";
}

VBA-syntaksen kender jeg ikke, men du kan sikkert selv oversætte.
Avatar billede bjarke Nybegynder
22. september 1999 - 11:07 #12
soepro >> hvis du mangler en mand i firmaet, så sig til. Hvis man virkelig har SÅ meget tid til at lege på eksperten, så må det da være et drømmejob;-)
Avatar billede shj Nybegynder
22. september 1999 - 11:56 #13
soepro tak for dine gode svar, jeg har ikke brugt dem direkte, men de har inspireret mig til en løsning der kan bruges i visual basic samtidig med at jeg har lært noget om datoer i c++
det er jo netop det der gør svar fra prof udviklere så lærerige.
Du for point når jeg kommer på arbejde, kan ikke acceptere svar hjemmefra da jeg skrev spørgsmålet på arbejdet
Hilsen Simon
Avatar billede soepro Nybegynder
22. september 1999 - 12:55 #14
bjarke >> Jeg synes da heller ikke du holder dig tilbage. Jeg ville ikke ansætte dig ! Jeg på den anden hånd må godt - det er jo min virksomhed !
Avatar billede bjarke Nybegynder
22. september 1999 - 13:14 #15
Jeg må nok også hellere få egen virksomhed, "når jeg bliver stor" ;-)
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