JavaRush /Java blogi /Random-UZ /30-daraja. Daraja mavzusi bo'yicha suhbat savollariga jav...
DefNeo
Daraja

30-daraja. Daraja mavzusi bo'yicha suhbat savollariga javoblar

Guruhda nashr etilgan
30-daraja. Daraja mavzusi bo'yicha suhbat savollariga javoblar - 1
  1. NaN nima?

    NaN (inglizcha Not-a-Number) suzuvchi nuqtali sonning maxsus holatlaridan biridir. Ko'pgina matematik kutubxonalarda va matematik protsessorlarda qo'llaniladi. Bu holat har xil holatlarda, masalan, oldingi matematik amal aniqlanmagan natija bilan yakunlanganda yoki xotira katakchasiga shartlarga javob bermaydigan raqam kiritilganda yuzaga kelishi mumkin.

    IEEE 754 ga muvofiq, bu holat ko'rsatkichni zahiralangan qiymatga 11...11, mantisani esa 0 dan boshqa har qanday qiymatga (mashina cheksizligi uchun zahiralangan qiymat) o'rnatish orqali aniqlanadi. Belgi va mantis ba'zi qo'shimcha ma'lumotlarni o'z ichiga olishi mumkin: ko'pgina kutubxonalar "salbiy" NaNni -NaN sifatida chiqaradi.

    Javob sifatida NaN ga olib keladigan operatsiyalarga quyidagilar kiradi:

    • operandlardan biri sifatida NaN ni o'z ichiga olgan barcha matematik operatsiyalar;
    • nolni nolga bo'lish;
    • cheksizlikni cheksizlikka bo'lish;
    • nolni cheksizlikka ko'paytirish;
    • qarama-qarshi belgining cheksizligi bilan cheksizlik qo'shilishi;
    • manfiy sonning kvadrat ildizini hisoblash[1];
    • manfiy sonning logarifmini olish.

    Ba'zi dasturlash tillarida "jim" va "signal" NaN mavjud: birinchisi, har qanday operatsiyada ishtirok etganda, NaN ni qaytaradi, ikkinchisi favqulodda vaziyatni keltirib chiqaradi. Odatda, "jim" yoki "signal" mantisaning eng muhim biti bilan belgilanadi.

    NaN boshqa qiymatga teng emas (hatto o'zi ham [2]); Shunga ko'ra, NaN uchun natijani tekshirishning eng oddiy usuli bu olingan qiymatni o'zi bilan solishtirishdir.

    Boshqa taqqoslash operatorlarining xatti-harakati tilga qarab farq qiladi. Ba'zi tillar noto'g'ri [3] hosil qiladi (a < b va b > a NaN bilan boshqacha munosabatda bo'lishi uchun), boshqalari hatto "sokin" NaN uchun ham ishdan chiqadi.

    Jim bo'lmagan NaN ni argument sifatida qabul qiladigan har qanday noaniq operatsiya, boshqa argumentlarning qiymatidan qat'i nazar, har doim NaN ni qaytaradi. Ushbu qoidadan istisnolar "ikkinchi" argumentning qiymatini (NaN dan tashqari) qaytaradigan max va min funksiyalaridir. Identifikatsiya bo'lgan ahamiyatsiz operatsiyalar maxsus ko'rib chiqiladi: masalan, 1NaN 1 ga teng.

  2. Java-da abadiylikka qanday erishish mumkin?

    Java-da tip doubleqo'shimcha cheksizlik va minus cheksizlik uchun maxsus ma'noga ega. 0,0 ga bo'lingan ijobiy son "ortiqcha cheksizlik" ni, salbiy raqam esa "minus cheksizlik" ni beradi. Ushbu tushunchalar turdagi maxsus konstantalarga mos keladi Double:

    Kod Tavsif
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; ortiqcha cheksizlik
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; minus cheksizlik
    1. Biz satrni raqamga aylantiramiz va unda harflar mavjud. Javob NaN
    2. Cheksizlik minus cheksizlik. Javob NaN
    3. Javobda raqamni kutadigan boshqa ko'plab vaziyatlar mavjud, ammo natijasi noma'lum.

    NaN ni o'z ichiga olgan har qanday operatsiya NaN ga olib keladi.

    Cheksiz harakatlar:
    Ifoda Natija
    n ÷ ±Cheksizlik 0
    ±Infinity × ±Infinity ±Cheksizlik
    ±(nol emas) ÷ ±Cheksizlik
    Infinity + Infinity Cheksizlik
    ±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, то ленивых вычислений происходить не будет)

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