JavaRush /Blog Java /Random-MS /Tahap 30. Jawapan kepada soalan temu bual mengenai topik ...
DefNeo
Tahap

Tahap 30. Jawapan kepada soalan temu bual mengenai topik tahap

Diterbitkan dalam kumpulan
Tahap 30. Jawapan kepada soalan temu bual mengenai topik tahap - 1
  1. Apakah NaN?

    NaN (Inggeris Bukan-Nombor) ialah salah satu daripada keadaan istimewa nombor titik terapung. Digunakan dalam banyak perpustakaan matematik dan coprocessor matematik. Keadaan ini boleh berlaku dalam pelbagai kes, contohnya, apabila operasi matematik sebelumnya diselesaikan dengan keputusan yang tidak pasti, atau jika nombor yang tidak memenuhi syarat telah dimasukkan ke dalam sel memori.

    Selaras dengan IEEE 754, keadaan ini ditentukan dengan menetapkan eksponen kepada nilai terpelihara 11...11, dan mantissa kepada apa-apa selain 0 (nilai terpelihara untuk infiniti mesin). Tanda dan mantissa mungkin membawa beberapa maklumat tambahan: banyak perpustakaan mengeluarkan NaN "negatif" sebagai -NaN.

    Operasi yang menghasilkan NaN sebagai tindak balas termasuk:

    • semua operasi matematik yang mengandungi NaN sebagai salah satu operan;
    • membahagikan sifar dengan sifar;
    • membahagikan infiniti dengan infiniti;
    • mendarab sifar dengan infiniti;
    • penambahan infiniti dengan infiniti tanda bertentangan;
    • mengira punca kuasa dua nombor negatif[1];
    • mengambil logaritma nombor negatif.

    Sesetengah bahasa pengaturcaraan mempunyai NaN "senyap" dan "isyarat": yang pertama, apabila terlibat dalam sebarang operasi, mengembalikan NaN, yang kedua menyebabkan kecemasan. Lazimnya, "tenang" atau "isyarat" ditentukan oleh bahagian mantissa yang paling ketara.

    NaN tidak sama dengan mana-mana nilai lain (walaupun dirinya sendiri[2]); Sehubungan itu, kaedah paling mudah untuk menyemak keputusan untuk NaN ialah membandingkan nilai yang terhasil dengan dirinya sendiri.

    Tingkah laku pengendali perbandingan lain berbeza mengikut bahasa. Sesetengah bahasa menghasilkan false[3] (supaya a < b dan b > a berkelakuan berbeza dengan NaN), yang lain melemparkan ranap walaupun untuk NaN "senyap".

    Sebarang operasi bukan remeh yang mengambil NaN senyap sebagai hujah akan sentiasa mengembalikan NaN, tanpa mengira nilai hujah lain. Satu-satunya pengecualian kepada peraturan ini ialah fungsi maks dan min, yang mengembalikan nilai argumen "kedua" (selain daripada NaN). Operasi remeh yang merupakan identiti dilayan secara khusus: contohnya, 1NaN bersamaan dengan 1.

  2. Bagaimana untuk mendapatkan infiniti di Jawa?

    Di Jawa, jenis doublemempunyai makna khas untuk tambah infiniti dan tolak infiniti. Nombor positif dibahagikan dengan 0.0 memberikan "tambah infiniti", dan nombor negatif - "tolak infiniti". Konsep ini sepadan dengan pemalar khas jenis Double:

    Kod Penerangan
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; ditambah infiniti
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; tolak infiniti
    1. Kami menukar rentetan kepada nombor, dan ia mengandungi huruf. Jawapannya ialah NaN
    2. Infiniti tolak infiniti. Jawapannya ialah NaN
    3. Terdapat banyak situasi lain di mana mereka mengharapkan nombor dalam jawapan, tetapi hasilnya tidak diketahui.

    Sebarang operasi yang mengandungi NaN menghasilkan NaN.

    Tindakan dengan infiniti:
    Ungkapan Hasilnya
    n ÷ ±Infiniti 0
    ±Infiniti × ±Infiniti ±Infiniti
    ±(bukan sifar) ÷ ±Infiniti
    Infiniti + Infiniti Infiniti
    ±0 ÷ ±0 NaN
    Infinity - Infinity NaN
    ±Infinity ÷ ±Infinity NaN
    ±Infinity × 0 NaN
  3. Как проверить, что в результате вычисления получилась бесконечность?

    Есть ответ на StackOverFlow.

    Все сводится к выводу System.out.println()

  4. What такое битовая маска?

    Битовая маска — это когда хранится много различных логических значений (true/false) в виде одного целого числа. При этом каждому boolean-значению соответствует определенный бит.

  5. Где применяют битовые маски?

    В основном там, где надо компактно хранить много информации об an objectх. Когда хранишь много информации об an objectе, всегда наберется пара десятков логических переменных. Вот их всех удобно хранить в одном числе. Именно хранить. Т.к. пользоваться им в работе не так уж удобно.

  6. Как установить бит в единицу в битовой маске?

    Опираясь на лекции можно ответить таким codeом:

    Здесь использовал метод Integer.toBinaryString(), дабы проверить себя, а вдруг)

    public class BitMask {
    
        public static void main(String[] args) {
            int a = 9;
    
           a |= (1<<2); // установить в 1 бит 2
    
    
            System.out.println(Integer.toBinaryString(a) + " "+ a);
        }
    }

    Вывод такой:

    1101 13

  7. Как установить бит в ноль в битовой маске?

    public class BitMask {
    
    public static void main(String[] args) {
    int a = 15;
    
    a &= ~(1<<2); // установить в 0 бит 2
    System.out.println(Integer.toBinaryString(a) + " "+ a);
    
        }
    }

    Вывод:

    1011 11

    Я взял число 15, так How на нем более наглядно видно, куда устанавливается 0.

  8. Как получить meaning определенного бита в битовой маске?

    public class BitMask {
    
    public static void main(String[] args) {
         int a = 15;
    
         a &= ~(1<<2); // установить в 0 бит 2
    
         int c = a & (1<<2); // узнаем про 2 бит
         int d = a & (1<<3); // узнаем про 3 бит
        System.out.println(Integer.toBinaryString(a) + " "+ a + " " + c +" "+ d);
    
        }
    }

    Вывод:

    1011 11 0 8

    C 0 все понятно, на том месте и вправду 0. А переменная d возвращает meaning запрашиваемого бита (в 10-ой системе).

  9. What такое ленивое вычисление выражения?

    Статья: Ленивое программирование и ленивые вычисления

    Это ленивые вычисления (lazy evaluation). В ленивых вычислениях ни один параметр не вычисляется, пока в нем нет необходимости. Программы фактически начинаются с конца и работают от конца к началу. Программа вычисляет, что должно быть возвращено, и продолжает движение назад, чтобы определить, Howое meaning для этого требуется. В сущности каждая функция вызывается с promise'ами для каждого параметра. Когда для вычисления необходимо meaning, тогда выполняется promise. Поскольку code выполняется только тогда, когда необходимо meaning, это называется вызов по необходимости (call-by-need). В традиционных языках программирования instead of promise'ов передаются значения, это называется вызов по значению(call-by-value).

    Технология программирования "вызов по необходимости" имеет ряд преимуществ. Потоки имплементируются автоматически. Ненужные значения никогда не вычисляются. Однако, поведение ленивых программ часто трудно предсказать. В программах типа "вызов по значению" порядок вычисления довольно предсказуем, поэтому любые time- or sequence-based вычисления относительно легко имплемнтировать. В ленивых языках, где специальные конструкции, например, monads, необходимы для описания явно упорядоченных событий, это намного труднее. Все это также делает связь с другими языками более трудной.

    Существуют языки программирования, например, Haskell и Clean, использующие ленивое программирование по умолчанию. Кроме того, для некоторых языков, таких How Scheme, ML и другие, существуют ленивые версии.

    Иногда, откладывая вычисления до тех пор, пока не понадобится их meaning, вы можете оптимизировать speed выполнения программы or реструктурировать программу в более понятную форму. Несмотря на свою ценность, методы ленивого программирования не слишком широко используются or даже не очень известны. Подумайте о том, чтобы добавить их в ваш арсенал.

  10. Чем отличается использование && и & для типа boolean?

    && — это логическое «и». (В этом случае имеют место ленивые вычисления: некоторые вычисления опускаются, когда результат и так ясен)

    & — это побитовое «и» (Если применить этот оператор к переменным типа Boolean, то ленивых вычислений происходить не будет)

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION