Что произойдёт если скомпилировать и выполнить следующий код?

public class MyFirst {
    static public  void main(String[] args) {  //1
        int a = 5;
        a = a!=0 ? a>1 ? a>>2 : a<<2 : a<1 ? a<<2 : a>>2;   //2
        System.out.println(a);
    }
}
Explanation
Если знать как правильно работают условные операторы ? и :, выражение с которыми имеет такой вид:
условие ? выражение если условие выполнилось : выражение если условие не выполнилось

то можно легко понять, что следующий код стоит рассматривать как несколько условных операторов в одном:
a=[a!=0]?
[(a>1)?(a>>2):(a<<2)] <-если a не равно 0
:
[(a<1)?(a<<2):(a>>2)]; <-если а равно 0

и в конце переменной а присвоится значение (a>>2), это значит, что мы сдвигаем 5 (в двоичном 0101) на 2 бита и получаем 0001,а это у нас равно 1.

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты