pienin integer eri kuin javassa

Mistä johtuu että pienin int on yhtä suurempi kuin -2^n

https://codescracker.com/c/c-data-types.htm
https://codescracker.com/cpp/cpp-data-types.htm
https://codescracker.com/java/java-integers.htm

Myös tuolla määritellään alueet kuten javassa
https://en.wikipedia.org/wiki/Integer_(computer_science)

esim.
Signed: From −32,768 to 32,767, from −(2^15) to 2^15 − 1
c:ssä ja c :ssa esim.
−32,767 to 32,767
101673
1Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat
  • Mutta kun -32768 ei kuuluu lukualueeseen, esim abs(-32768) antaa vastauseksi -32768 c-kielessä

    Äänestä

  • Anonyymi kirjoitti:

    Mutta kun -32768 ei kuuluu lukualueeseen, esim abs(-32768) antaa vastauseksi -32768 c-kielessä

    tuolla on myös -32768 ... 32767

    https://en.wikipedia.org/wiki/C_data_types

    Äänestä

  • Anonyymi kirjoitti:

    tuolla on myös -32768 ... 32767

    https://en.wikipedia.org/wiki/C_data_types

    Ilmeisesti voi toimia oikein -2^n (n kuvaa suurin potenssia ko. lukualueelle) arvolla, mutta se ei ole varmaa: viite a b c d ja e

    Äänestä

  • Anonyymi kirjoitti:

    Mutta kun -32768 ei kuuluu lukualueeseen, esim abs(-32768) antaa vastauseksi -32768 c-kielessä

    -32768 kuuluu lukualueeseen mutta abs(-32768) = 32768 ei kuulu.

    Äänestä

  • Anonyymi kirjoitti:

    Mutta kun -32768 ei kuuluu lukualueeseen, esim abs(-32768) antaa vastauseksi -32768 c-kielessä

    Tuo ei ehkä pidä paikkaansa mutta jotain ongelmaa oli :)

    Äänestä

Nähtävästi olin väärässä ja C standardin mukaan lukualue todella on "ainakin -32767 .. 32767".

Syy on historiallinen. Tietokoneiden alkuaikoina oli useita eri tapoja miten negatiivisia lukuja esitettiin binäärimuodossa. Joissakin prosessoreissa lukualue oli -32767 .. 32767 ja toisissa -32768 .. 32767 ja yhteensopivuuden vuoksi C standardi tukee lukualuetta "ainakin -32767 .. 32767" joka on yhteensopiva noiden molempien kanssa.

Esimerkiksi Java sen sijaan on sen verran "uusi" ohjelmointikieli että sen ei tarvinnut tukea historiallisia prosessoreja joiden lukualue oli -32767 .. 32767, vaan se pystyi ottamaan lukualueeksi tuon -32768 .. 32767 jota käytännössä kaikki uudemmat prosessorit käyttivät.

Nykyään käytännössä kaikki prosessorit käyttävät "kahden komplementti" muotoa jossa lukualue on -32768 .. 32767 myös kun käytetään C-kieltä.

Äänestä
  • Mistähän sinä tuon tarinan löysit

    Äänestä

  • Anonyymi kirjoitti:

    Mistähän sinä tuon tarinan löysit

    Useista lähteistä yhdistelin, esimerkiksi:

    https://en.wikipedia.org/wiki/C_data_types#cite_note-restr-5
    "The minimal ranges −(2^(n−1)−1) to 2^(n−1)−1 (e.g. [−127,127]) come from the various integer representations allowed by the standard (ones' complement, sign-magnitude, two's complement). However, most platforms use two's complement, implying a range of the form −2^(m−1) to 2^(m−1)−1 with m ≥ n for these implementations, e.g. [−128,127] (SCHAR_MIN = −128 and SCHAR_MAX = 127) for an 8-bit signed char."

    https://en.wikipedia.org/wiki/Signed_number_representations#History
    - negatiivisten lukujen esitystapojen historiaa

    Äänestä

Kommentoi aloitusta


Anonyymi kirjoitti:

Mistä johtuu että pienin int on yhtä suurempi kuin -2^n

https://codescracker.com/c/c-data-types.htm
https://codescracker.com/cpp/cpp-data-types.htm
https://codescracker.com/java/java-integers.htm

Myös tuolla määritellään alueet kuten javassa
https://en.wikipedia.org/wiki/Integer_(computer_science)

esim.
Signed: From −32,768 to 32,767, from −(2^15) to 2^15 − 1
c:ssä ja c :ssa esim.
−32,767 to 32,767

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu