SORU
11 HAZİRAN 2014, ÇARŞAMBA


Neden = ben bana 0 verir mi?

Basit bir program var:

public class Mathz {
    static int i = 1;
    public static void main(String[] args) {    
        while (true){
            i = i   i;
            System.out.println(i);
        }
    }
}

Bu programı çalıştırdığınızda, tek gördüğüm benim çıkış i 0. İlk defa* *4, i = 2 2, i = 4 4 vb tarafından takip ederdik yuvarlak beklerdim.

Sol tarafta re-ilan i el-yan etmeye çalışıyoruz en kısa sürede, onun değerini sıfırlamak alır olması nedeniyle bu 8 ** için mi?

Eğer herkes bu ince detaya bana gelin eğer ben harika olurdu.

long int değişim ve beklendiği gibi baskı sayıları gibi görünüyor. Max 32-bit değeri vurur nasıl şaşırdım!

CEVAP
11 HAZİRAN 2014, ÇARŞAMBA


Konu tamsayı taşması nedeniyle.

32-bit ikişer-tamamlayıcı aritmetik:

i nitekim-güç iki değerlere sahip başlar, ama sonra taşma davranışları 2 varınca başlar30:

230230= -231

-231-231= 0

...int aritmetik.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Day9TV

    Day9TV

    22 NİSAN 2010
  • hanksranger

    hanksranger

    6 EKİM 2009
  • The Weavers of Eternity Paracord Tutorials

    The Weavers

    1 Ocak 2014