C programozás 2

Kezdőlap Fórumok Programozás C programozás 2

10 bejegyzés megtekintése - 21-30 / 76
  • Szerző
    Bejegyzés
  • #2017257
    kisbetu
    Felhasználó

      Minden tiszteletem a tiétek, kisbetu, de a ‘bites vagy (|) ‘ használatával a kód mindig igazat ad, így használhatatlan az én olvasatomban. Vagy valamit tényleg félre nézek.  :rolleyes:
      [align=right][snapback]138188[/snapback][/align]

      Nézd, én gyûlölöm a C-t, assemblyben viszont elég jól elnavigálok.

      00011111 VAGY 00000100 = 00011111
      00011011 VAGY 00000100 = 00000000
      ezzel megnéztem, hogy a 3. bit nulla-e

      00011111

      #2017258
      Leslieman
      Felhasználó

        Ez tényleg igaz:
        00011111 VAGY 00000100 = 00011111
        Ez nem igaz assemblyben sem:
        00011011 VAGY 00000100 = 00000000
        ezzel megnéztem, hogy a 3. bit nulla-e

        Ez igaz, én is ezért írtam

        #2017259
        pointux
        Felhasználó

          Köszi a hozzászólásokat.
          Kicsit belebonyolódtam a kizáró vagyba. A lónak is 4 lába van…
          Azt hiszem már írtam, nyugodtan javítsd ki kisbetu…
          (Ja, talán szerencsésebb lett volna a bittenkénti logikai vagy kifejezés.)

          #2017260
          Leslieman
          Felhasználó

            Kicsit belebonyolódtam a kizáró vagyba. A lónak is 4 lába van…

            #2017261
            pointux
            Felhasználó

              Ja, ja igazad van az az és, amit kellene használni… (nekem meg a fejem, nemcsak evésre)
              (Nem jött be ez a tegnapi nap :))

              „hát ez itt nem is programozói verseny.”
              Nem, nem. Az a lényeg, hogy végül kiderüljön az igazság :))))

              #2017262
              ds
              Felhasználó

                Na szóval, amit írni akartam:
                „Bocs de azt nem értem. A másik gép lehet pl egy windowsos gép vagy a SPARC is, ezért kéne a kikötés.”
                – Az, hogy egy bizonyos változó típus mekkora helyet kap az a fordító specialitása, nem a oprendszeré. Pl. egy asm/gépikódú byte, mindig 8 bit, egy szó mindig 16 bit stb. lesz.

                [align=right][snapback]138091[/snapback][/align]

                az,hogy egy int típus hány bájtos az a cputól,fordítótól,oprendszertõl függ!!

                „The size of a signed or unsigned int item is the standard size of an integer on a particular machine. For example, in 16-bit operating systems, the int type is usually 16 bits, or 2 bytes. In 32-bit operating systems, the int type is usually 32 bits, or 4 bytes. Thus, the int type is equivalent to either the short int or the long int type, and the unsigned int type is equivalent to either the unsigned short or the unsigned long type, depending on the target environment. The int types all represent signed values unless specified otherwise.

                az, hogy a memóriában, hogy néz ki egy több bájtos valami az meg aztán pláne nem egyértelmû 🙂 (little-endian, big-endian)

                #2017263
                pointux
                Felhasználó

                  Vérszagra gyûl az éji vad… 🙂

                  „az,hogy egy int típus hány bájtos az a cputól,fordítótól,oprendszertõl függ!!”
                  Kizárólag a fordítótól:

                  Pl. ezt win/*nix, 13/32/64 bites processzoron bármelyikén, ez a részlet
                  short int a;
                  _AX = a;

                  nézhet ki így, tök mindegy, hogy milyen vas, vagy os van alatta (32 bites szegmenssel):
                  …00: 0x0000
                  …02: 66 67 A1 …00 (mov ax, […00])
                  és ez már nem fog változni, semmilyen procin, mert gépikód – ilyet fog létrehozni a fordító és kész
                  (16 bites szegmenssel, 16 bites procin csak ez megy)
                  …02: A1 …00

                  aztán (32 bites szegmenssel):
                  long int a;
                  _EAX = a;
                  …00: 0x00000000
                  …04: A1 …00 (mov eax, […00])
                  (16 bites szegmenssel, 16 bites cpu-n ez sem futhat)
                  …04: 66 67 A1 …00

                  na ezzel valóban az a helyzet, hogy 16 bites processzoron nem fut, bár attól, lehetne az int/longint 32 bites, de sokkal nehezebben lehetne bánni vele, mivel nincs általános célú 32 bites regiszter
                  long int a;
                  …00: 0x00000000
                  …04: mov ax, […02]
                  ……: mov dx, […04]

                  tehát csak praktikussági okokból van ez az int kavarás
                  (
                  – az int deffiniciót az általános regiszterek méretéhez igazították
                  – hogy miért?
                  – látod is a 66 67 miatt – amit az idétlen 16 bites kompatibilitás miatt van; mert ha a regiszter nem a természetes környezetében van (32 bites regiszter – 32 bites szegmens/ 16 bites regiszter – 16 bites szegmens), akkor az „elõcsalogatásához” + két byte-ra van szükség
                  – viszont mindenki szeret keveset írni, így egy 32 bites szegmensben egy 16 bites változót illetni a legrövidebb néven, a legnagyobb marhaság, mert erõforrás pazarló
                  )
                  de könyörgöm mutass már egy 16 bites processzorral ellátott pc-t? a 386-os processzor már 32 bites…
                  bár az igaz, hogy a windows a 98-as oprendszerrel bezárólag jórészt nem használta ki a 32 bites processzor elõnyeit, bár a legelsõ 32 bites processzoron, már alig-alig futott (ha futott egyátalán, 486-ra aszem még fel lehetett rakni); ezért egyes fordítókban maradt is az, hogy az int 16 bites…, de ezt már egyre kevesebb fordító használja
                  a gcc-ben pedig az int mindig 32 bites és azonos méretû, mint a long int, amíg a short int 16 bites, tök mindegy milyen rendszer alatt…
                  de, ha más fordítóval is ugyanazt a kódot kell elõállítani a short intet, vagy a long intet kell használni. az elõbbi mindig 16 bites, az utóbbi mindig 32 bites (ha jól tudom)

                  Nos, most már belátható, hogy a cpu-tól csak praktikussági okok miatt függhet(ne), de senki nem akar ma 16 bites cpu-val ellátott pc-re programot írni.
                  Aki pedig egy 386-os, vagy jobb arc.-ával ellátott gépen 16 bites os-t használ meg is érdemli.
                  De a lényeg az, hogy a fordító olyan gépikódot generál, amilyet akar. (Legfeljebb erõforrás pazarló lesz.)

                  #2017264
                  szati
                  Felhasználó
                    #2017265
                    pointux
                    Felhasználó

                      ltoa…
                      char * ltoa ( long value, char * buffer, int radix );

                      #2017266
                      szati
                      Felhasználó

                        Itt találtam róla ném infót: http://ftp.gnu.org/savannah/files/avr-libc…stdlib.html#a24

                        ha jól értem a radix ha 10 akkor tizes számrendszerbeli számot kapok. Jól értem?

                      10 bejegyzés megtekintése - 21-30 / 76
                      • Be kell jelentkezni a hozzászóláshoz.