Что возвращает следующий метод, true или false?
boolean isValid() {
try {
return true;
} finally {
return false;
}
}
Метод вернет false, согласно JLS 14.20.2: в выражении try-finally блок finally всегда выполняется, когда управление уходит из блока try. Авторы рекомендуют никогда не покидать блок finally с помощью return, break, continue or throw. Это небезопасно!
четверг, 6 сентября 2007 г.
Java Puzzle 35: Minute by Minute
Следующая программа имитирует простые часы:
int minutes = 0;
for (int ms = 0; ms < 60*60*1000; ms++)
if (ms % 60*1000 == 0)
minutes++;
Программа считае миллисекунды, добавляя время от времени минуты. И чему будет равно количество минут в конце цикла?
А вот и нет! В часе получается не 60 минут, а 60000. А проблема в том, что % и * равнозначные операторы. Т.е. сначала выполняется ms % 60, и 0 тут получается гораздо чаще, чем ms % (60*1000). Как сделать правильно? Заменить все магические числа на константы:
int MS_PER_HOUR = 60 * 60 * 1000;
int MS_PER_MINUTE = 60 * 1000;
int minutes = 0;
for (int ms = 0; ms < MS_PER_HOUR; ms++)
if (ms % MS_PER_MINUTE == 0)
minutes++;
Пользователей може запутать, что вокруг % находятся пробелы, а вокруг * - нет. Компилятору до них никакого дела нет. Никогда не используйте пробелы для группировки операторов. Используйте скобки!
int minutes = 0;
for (int ms = 0; ms < 60*60*1000; ms++)
if (ms % 60*1000 == 0)
minutes++;
Программа считае миллисекунды, добавляя время от времени минуты. И чему будет равно количество минут в конце цикла?
А вот и нет! В часе получается не 60 минут, а 60000. А проблема в том, что % и * равнозначные операторы. Т.е. сначала выполняется ms % 60, и 0 тут получается гораздо чаще, чем ms % (60*1000). Как сделать правильно? Заменить все магические числа на константы:
int MS_PER_HOUR = 60 * 60 * 1000;
int MS_PER_MINUTE = 60 * 1000;
int minutes = 0;
for (int ms = 0; ms < MS_PER_HOUR; ms++)
if (ms % MS_PER_MINUTE == 0)
minutes++;
Пользователей може запутать, что вокруг % находятся пробелы, а вокруг * - нет. Компилятору до них никакого дела нет. Никогда не используйте пробелы для группировки операторов. Используйте скобки!
Lingvo 11
Купил год назад Лингво 11. Поддержал, так сказать, отечественного производителя. Активно использую. Иногда, для обычных слов открывает дополнительные окошки с нецензурным сленгом. Сейчас сразу не вспомнить, но было пару раз. На работе использую Tutor, который выдает слова на английском или на русском, а к ним нужно набрать перевод. Вещь удобная. Особенно на коммуникаторе. К нам приехали коллеги из штатов, так во время разговора можно быстро найти перевод. Чаще всего с русского на английский.
Ставил тут его на домашний компьютер. Он мне заявил, что неплохо было бы купить 12-ю версию. Залез на сайт. Сравнил. Сейчас напишу, что понравилось.
Вот и думай, не поддержать ли отечественного производителя еще раз.
Ставил тут его на домашний компьютер. Он мне заявил, что неплохо было бы купить 12-ю версию. Залез на сайт. Сравнил. Сейчас напишу, что понравилось.
- В новой версии они написали Tutor под PocketPC. Гораздо удобнее, когда карточки слов всегда собой, например, в метро.
- Обновили поиск: теперь включается полнотекстовый поиск, если слово не найдено. Также можно искать по маске, если не уверен в написании слова.
- Сделана полная интеграция в Windows: при наведении курсора мыши на слово в любом приложении всплывает окошко с его переводом.
- Есть европейская версия с дополнительными языками: немецкий, французский, итальянский и испанский. И есть многоязычная версия, где помимо указанных языков есть китайский, турецкий, украинский и латинский.
Вот и думай, не поддержать ли отечественного производителя еще раз.
Налоговые вычеты
Занимаюсь возвратом денег с налоговой. Тот еще геморрой. В налоговой дали кучу каких-то бумажек и сказали заполнять. На стендах ничего не нашел по приобретенной недвижимости. Долго вникал в непонятные закорючки и, если бы не программа "Декларация 2006", то уже сошел бы с ума...
БЮРОКРАТЫ!
БЮРОКРАТЫ!
среда, 5 сентября 2007 г.
Негатив
Выруливаю из метро сегодня вечером. Настроение хорошее. Лечу на крейсерской скорости домой. Тут около метро меня девчока останавливает, типа, па-ма-ги-те. Буркнул в ответ, типа, не ко мне. Лечу дальше. Пролетаю через сквер. Темно. Фонарей нет. Чувак подруливает, типа, братишка не уделишь пару минут драгоценного времени. А еще двое невдалеке пасутся. Ну я говорю "нет" и улетаю. Он в догонку кричит "я, кажется, тебя знаю". Хрен с ним. Перехожу перекресток. Мне на перерез какая-то тетка выбежала и дорогу перегородила. Остановилась, типа, ждет меня. Но я сделал финт ушами, срезал угол и даже не знаю, чего она от меня хотела. Задолбали. Я что? медом намазан?
воскресенье, 2 сентября 2007 г.
Java Puzzle 34: Down for the Count
Так же как и в головоломках 26 и 27 мы должны узнать количество итераций цикла (count):
final int START = 2000000000;
int count = 0;
for (float f = START; f < START + 50; f++)
count++;
Если вы думаете, что count == 50, то ошибаетесь. Это вам не целочисленная арифметика! Начальное значение цикла близко к максимальному и требует 31 бит, но тип float предоставляет только 24 бита для точности числа. Часть числа теряется при конвертации, т.е. (float)2000000000 == (float)2000000050. Вот так и получается, что тело цикла не будет выполнено...
Авторы не рекомендуют использовать float и double как индекс цикла, так как поведение при больших значениях непредсказуемо. Если же все-таки нужно использовать арифметику с плавающей точной, то лучше использовать double, так как тут больше точность. И будьте начеку!
final int START = 2000000000;
int count = 0;
for (float f = START; f < START + 50; f++)
count++;
Если вы думаете, что count == 50, то ошибаетесь. Это вам не целочисленная арифметика! Начальное значение цикла близко к максимальному и требует 31 бит, но тип float предоставляет только 24 бита для точности числа. Часть числа теряется при конвертации, т.е. (float)2000000000 == (float)2000000050. Вот так и получается, что тело цикла не будет выполнено...
Авторы не рекомендуют использовать float и double как индекс цикла, так как поведение при больших значениях непредсказуемо. Если же все-таки нужно использовать арифметику с плавающей точной, то лучше использовать double, так как тут больше точность. И будьте начеку!
Java Puzzle 33: Looper Meets the Wolfman
Сделайте следующий цикл бесконечным, не используя возможности Java 5:
while (i != 0 && i == -i)
Забавно, но все кроется в компьютерной арифметике. Как получаются отрицательные числа? Изменяем значение каждого бита и прибавляем 1. Это сделано для удобства работы с 0: -0 => 0xFFFFFFFF + 1 => 0. Остальные числа либо отрицательные, либо положительные, но! Отрицательных чисел больше, так как количество комбинаций бит четное, а одна из них занята 0. Мы имеем уникальное отрицательное число, пары которому нет: -0x80000000 => 0x7FFFFFFF + 1 => 0x80000000. Т.е. i == -i, но в то же время не равно 0. Вот и ответ:
int i = Integer.MIN_VALUE;
while (i != 0 && i == -i)
Забавно, но все кроется в компьютерной арифметике. Как получаются отрицательные числа? Изменяем значение каждого бита и прибавляем 1. Это сделано для удобства работы с 0: -0 => 0xFFFFFFFF + 1 => 0. Остальные числа либо отрицательные, либо положительные, но! Отрицательных чисел больше, так как количество комбинаций бит четное, а одна из них занята 0. Мы имеем уникальное отрицательное число, пары которому нет: -0x80000000 => 0x7FFFFFFF + 1 => 0x80000000. Т.е. i == -i, но в то же время не равно 0. Вот и ответ:
int i = Integer.MIN_VALUE;
Автохолодильник
Сегодня ездил в MediaMarkt покупать холодильник для автомобиля. Купил Vitek за 2000р. Выглядит он примерно так.
Иду я с ним на выход. Меня окликает Иван Платонов. Он там с сыном гулял на детской площадке. Он сказал, что подумал сначала, что я торгую, типа, пирожками (в кожанной жилетке, с холодильником, небритый). Вот как обо мне бывшие однокурсники думают!
Еще он рассказал, что его жена с дочкой рисуют возле ИКЕА. Там можно купить глиняную фигурку и расскрашивать ее красками, что там дают. Проходил потом мимо, видел кучу детей с родителями, разрисовывающих свои фигурки, но Елену не увидел, а жаль. Хотел подойти поприветствовать.
В конце сентября повезем от тещи замороженные ягоды, фрукты-овощи. Вот и потестируем, как оно ожлаждает. Можно, конечно, использовать охлаждаемый бардачок в Сценике, но не хотелось бы, чтобы протекло что-нибудь. Не отмоем потом.
Иду я с ним на выход. Меня окликает Иван Платонов. Он там с сыном гулял на детской площадке. Он сказал, что подумал сначала, что я торгую, типа, пирожками (в кожанной жилетке, с холодильником, небритый). Вот как обо мне бывшие однокурсники думают!
Еще он рассказал, что его жена с дочкой рисуют возле ИКЕА. Там можно купить глиняную фигурку и расскрашивать ее красками, что там дают. Проходил потом мимо, видел кучу детей с родителями, разрисовывающих свои фигурки, но Елену не увидел, а жаль. Хотел подойти поприветствовать.
В конце сентября повезем от тещи замороженные ягоды, фрукты-овощи. Вот и потестируем, как оно ожлаждает. Можно, конечно, использовать охлаждаемый бардачок в Сценике, но не хотелось бы, чтобы протекло что-нибудь. Не отмоем потом.
Google Page Creator
Тестировал Google Page Creator, но без новых "экспериментальных" возможностей пока...
Теперь одному человеку разрешается заводить до пяти сайтов. Каждому сайту, естественно, свои настройки. Каждый сайт можно временно скрыть или, например, пометить, как ресурс дя взрослых.
Автоматически для сайта включена опция оптимизации загружаемых изображений. Сжимаются они в JPEG. Поэтому эту опцию рекомендуется отключать, если надо загружать анимированные GIFы, например. Работа с изображениями сделана на 5. Его можно подогнать к рамеру страницы или сделать маленьким. Кроме того, можно настроить яркость, показывать часть изображения, а по ссылке выдавать полное. Все это делается на стороне сервера, а пользователь качает минимум информации.
Но больше всего мне понравилась поддержка мобильных устройств. Сайт автоматически меняет расположение элементов и размеры картинок так, что читать действительно удобно!
Не понравилось, что до сих пор нет поддержки таблиц. Хотелось бы иметь возможность задавать содержимое footer не для каждой страницы, а один раз - для сайта, так как он все равно обычно содержит одинаковую информацию. Так же хотелось бы, чтобы в навигационной панели автоматически создавалось навигационное меню, а то приходится копировать его со страницы на страницу, убирая ссылки на текущую. Надо будет включить "экспериментальные" возможности и проверить, нет ли там того, что мне хочется...
И самый большой минус! После пары часов экспериментов Windows выдало мне предупреждение о том, что кончается память и место на диске C. Я проверил Task Manager - iexplorer.exe скушал 800 мегабайт ОЗУ! Явный memory leak 8(
Результаты экспериментов можно посмотреть здесь. Рекомендую посмотреть с мобильника - выглядит симпатично!
Теперь одному человеку разрешается заводить до пяти сайтов. Каждому сайту, естественно, свои настройки. Каждый сайт можно временно скрыть или, например, пометить, как ресурс дя взрослых.
Автоматически для сайта включена опция оптимизации загружаемых изображений. Сжимаются они в JPEG. Поэтому эту опцию рекомендуется отключать, если надо загружать анимированные GIFы, например. Работа с изображениями сделана на 5. Его можно подогнать к рамеру страницы или сделать маленьким. Кроме того, можно настроить яркость, показывать часть изображения, а по ссылке выдавать полное. Все это делается на стороне сервера, а пользователь качает минимум информации.
Но больше всего мне понравилась поддержка мобильных устройств. Сайт автоматически меняет расположение элементов и размеры картинок так, что читать действительно удобно!
Не понравилось, что до сих пор нет поддержки таблиц. Хотелось бы иметь возможность задавать содержимое footer не для каждой страницы, а один раз - для сайта, так как он все равно обычно содержит одинаковую информацию. Так же хотелось бы, чтобы в навигационной панели автоматически создавалось навигационное меню, а то приходится копировать его со страницы на страницу, убирая ссылки на текущую. Надо будет включить "экспериментальные" возможности и проверить, нет ли там того, что мне хочется...
И самый большой минус! После пары часов экспериментов Windows выдало мне предупреждение о том, что кончается память и место на диске C. Я проверил Task Manager - iexplorer.exe скушал 800 мегабайт ОЗУ! Явный memory leak 8(
Результаты экспериментов можно посмотреть здесь. Рекомендую посмотреть с мобильника - выглядит симпатично!
суббота, 1 сентября 2007 г.
Java Puzzle 32: Curse of Looper
Определите i и j таким образом, чтобы сделать следующий цикл бесконечным:
while (i <= j && j <= i && i != j)
Необычный цикл. Если i <= j и j <= i, то это верно когда i == j. А следующее выражение проверяет i != j. Выглядит, что мы в цикл никогда не попадем. Хо-хо-хо!
А давайте использовать новые возможности Java 5: unboxing! Вот ответ:
Integer i = new Integer(0);
Integer j = new Integer(0);
При вычислении первых двух выражений он используется, так как операторы сравнения <= определены только для примитивных типов. А при вычислении последнего выражения - нет, и сравниваются ссылки на два разных объекта. А они не равны. Вот тут-то мы и попали 8(
while (i <= j && j <= i && i != j)
Необычный цикл. Если i <= j и j <= i, то это верно когда i == j. А следующее выражение проверяет i != j. Выглядит, что мы в цикл никогда не попадем. Хо-хо-хо!
А давайте использовать новые возможности Java 5: unboxing! Вот ответ:
Integer i = new Integer(0);
Integer j = new Integer(0);
При вычислении первых двух выражений он используется, так как операторы сравнения <= определены только для примитивных типов. А при вычислении последнего выражения - нет, и сравниваются ссылки на два разных объекта. А они не равны. Вот тут-то мы и попали 8(
Java Puzzle 31: Ghost of Looper
А как насчет такого цикла:
while (i != 0) i >>>= 1;
Сделаете его бесконечным?
Судя по оператору сдвига i должно быть целочисленным. А для присвоения используется составной оператор. Вот оно! Согласно JLS 15.26.2 такие операторы втихомолку выполняют сужающее преобразование примитивных типов. Согласно JLS 5.1.13 такое преобразование может терять информацию о величине или точности числовых значений. Вот и ответ:
short i = -1; // или byte
Вкратце: 0xFFFF != 0 и мы заходим в цикл. Так как оператор сдвига реализован только для типов int и long мы получаем 0xFFFF -> 0xFFFFFFFF -> 0x7FFFFFFF -> 0xFFFF. Тут мы и зацикливаемся. Авторы советуют не использовать составные операторы присвоения для типов short, byte или char.
while (i != 0) i >>>= 1;
Сделаете его бесконечным?
Судя по оператору сдвига i должно быть целочисленным. А для присвоения используется составной оператор. Вот оно! Согласно JLS 15.26.2 такие операторы втихомолку выполняют сужающее преобразование примитивных типов. Согласно JLS 5.1.13 такое преобразование может терять информацию о величине или точности числовых значений. Вот и ответ:
short i = -1; // или byte
Вкратце: 0xFFFF != 0 и мы заходим в цикл. Так как оператор сдвига реализован только для типов int и long мы получаем 0xFFFF -> 0xFFFFFFFF -> 0x7FFFFFFF -> 0xFFFF. Тут мы и зацикливаемся. Авторы советуют не использовать составные операторы присвоения для типов short, byte или char.
Puzzle
Сегодня был у Пашки в гостях. Увидел, что он там паззл собирает. Осталось собрать небо и воду. А там штук по сто фишек одинакового цвета. Вспомнил дедство - помог ему с водой, так как там меньше фишек было.
Когда собираешь одноцветные фишки легко их перепутать. Я собрал нижний ровный край и стал собирать в центре. 4 фишки никак не лезут. Пришлось разобрать и пересобрать нижний край немного по другому. Странно, что существует два варианта.
Теперь ему небо собирать. Видимо еще неделю потратит ;)
Когда собираешь одноцветные фишки легко их перепутать. Я собрал нижний ровный край и стал собирать в центре. 4 фишки никак не лезут. Пришлось разобрать и пересобрать нижний край немного по другому. Странно, что существует два варианта.
Теперь ему небо собирать. Видимо еще неделю потратит ;)
СберБанк РФ
Давно уже плачу за коммунальные платежи в ПетроЭлектроСбыт. Очень удобно. Не берут коммиссию, если платишь в другом районе. Один из центров расположен очень удобно - рядом с работой. Очередей практически нет. Максимум что видел - очередь из трех человек, после чего прошел к дальнему окошку и стал вторым.
Но тут пришла квитанция на оплату домофона за 2 года. В ПЭСб мне сказали, что договора с той организацией у них нет и они не могут принять платеж. Пришлось идти в спербанк. Блин!
У нас достаточно большой центр - окошек 20 будет, но работают только 2 из них. Естественно очереди громадные - минут 40 потратил. И тетки там работают так, как будто делают нам одолжение. И очень медленно!
Но тут пришла квитанция на оплату домофона за 2 года. В ПЭСб мне сказали, что договора с той организацией у них нет и они не могут принять платеж. Пришлось идти в спербанк. Блин!
У нас достаточно большой центр - окошек 20 будет, но работают только 2 из них. Естественно очереди громадные - минут 40 потратил. И тетки там работают так, как будто делают нам одолжение. И очень медленно!
пятница, 31 августа 2007 г.
Java Puzzle 30: Son of Looper
Сделайте цикл бесконечным не используя числа с плавающей запятой:
while (i != i + 0)
Это - элементарно! Оператор + перегружен для класса String. Новичков это может вводить в заблуждение. Вот ответ:
String i = "Buy seventeen copies of Effective Java!";
Тут же авторы напоминают, что задача может ввести в заблуждение тем, что имя переменной - i. Обычно такое имя используется для целочисленных переменных. Правильное имя переменной, метода или класса так же важны для повышения читаемости программы, как и хорошие комментарии!
while (i != i + 0)
Это - элементарно! Оператор + перегружен для класса String. Новичков это может вводить в заблуждение. Вот ответ:
String i = "Buy seventeen copies of Effective Java!";
Тут же авторы напоминают, что задача может ввести в заблуждение тем, что имя переменной - i. Обычно такое имя используется для целочисленных переменных. Правильное имя переменной, метода или класса так же важны для повышения читаемости программы, как и хорошие комментарии!
Java Puzzle 29: Bride of Looper
Сделайте цикл бесконечным:
while (i != i)
После предыдущей задачки эта оказалась легче. Спецификация Java гласит: NaN не равно никакому значению с плавающей запятой, включая себя. Вот и ответ:
double i = Double.NAN;
Кроме того, NaN содержит еще сюрприз. Если один из операндов NaN, то результат всегда будет NaN:
double i = Double.NAN;
i - i != 0
Одним из основных правил NaN является правило, что если в резултате вычислений получен NaN, то вычисление неправильное и никакие дальнейшие вычисления не могут его исправить.
while (i != i)
После предыдущей задачки эта оказалась легче. Спецификация Java гласит: NaN не равно никакому значению с плавающей запятой, включая себя. Вот и ответ:
double i = Double.NAN;
Кроме того, NaN содержит еще сюрприз. Если один из операндов NaN, то результат всегда будет NaN:
double i = Double.NAN;
i - i != 0
Одним из основных правил NaN является правило, что если в резултате вычислений получен NaN, то вычисление неправильное и никакие дальнейшие вычисления не могут его исправить.
Blogger
Google интегрировала в Blogger вставку видео. Например, вот запись пожара, сделанная одним из наших сотрудников:
В процессе загрузки видео можно редактировать сообщение, но нельзя его опубликовать или закрыть окно. В качестве проигрывателя используется Google Video player.
В процессе загрузки видео можно редактировать сообщение, но нельзя его опубликовать или закрыть окно. В качестве проигрывателя используется Google Video player.
Прогноз погоды
G!Smeteo порадовало большим набором способов для быстрого получения прогноза погоды.
Wallpaper: но мне больше нравится простой темный фон.
Bar для IE или FireFox: еще одна панель уменьшит видимую область браузера.
Tray icon: а вот это надо будет попробовать.
ICQ robot: я думаю, что он быстро задолбает.
Widget для Opera 9: ну Оперой я не пользуюсь.
Google Gadget: Google Desktop меня не зацепил.
Wallpaper: но мне больше нравится простой темный фон.
Bar для IE или FireFox: еще одна панель уменьшит видимую область браузера.
Tray icon: а вот это надо будет попробовать.
ICQ robot: я думаю, что он быстро задолбает.
Widget для Opera 9: ну Оперой я не пользуюсь.
Google Gadget: Google Desktop меня не зацепил.
четверг, 30 августа 2007 г.
Java Puzzle 28: Looper
В следующих нескольких задачах авторы предлагают самим превратить некоторые циклы в бесконечные не изменяя сами циклы, а добавляя некоторые декларации перед ними.
В качестве примера рассмотрим следующий цикл:
for (int i = start; i <= start + 1; i++)
Вы думаете, что он выполнит только две итерации? Но вспомните предыдущие уроки. Следующая декларация сделает цикл бесконечным:
int start = Integer.MAX_VALUE - 1;
Теперь задание...
Сделайте цикл бесконечным:
while (i == i + 1)
Я долго думал, но так и не нашел решения. Мне кажется, что ни одной итерации не будет произведено. Я просто не подумал про числа с плавающей запятой [IEEE-754]. Помните, чему нас учили в школе? ∞ + 1 = ∞! Вот ответ:
double i = Double.POSITIVE_INFINITY;
Фактически можно использовать любое большое число, например 1.0e40. Так тоже будет работать из-за погрешности. Итак, выводы:
В качестве примера рассмотрим следующий цикл:
for (int i = start; i <= start + 1; i++)
Вы думаете, что он выполнит только две итерации? Но вспомните предыдущие уроки. Следующая декларация сделает цикл бесконечным:
int start = Integer.MAX_VALUE - 1;
Теперь задание...
Сделайте цикл бесконечным:
while (i == i + 1)
Я долго думал, но так и не нашел решения. Мне кажется, что ни одной итерации не будет произведено. Я просто не подумал про числа с плавающей запятой [IEEE-754]. Помните, чему нас учили в школе? ∞ + 1 = ∞! Вот ответ:
double i = Double.POSITIVE_INFINITY;
Фактически можно использовать любое большое число, например 1.0e40. Так тоже будет работать из-за погрешности. Итак, выводы:
- В Java возможно представить ∞ как число типа float или double. Многие удивляются, так как обычно используют целочисленную арифметику.
- Добавление маленького числа к большому может не изменить его. Это так же неожиданно, потому что обычная арифметика это не рассматривает.
- Компьютерная арифметика для чисел с плавающей точкой - это некоторая аппроксимация настоящей арифметики.
Java Puzzle 27: Shifty i's
Также как и в прошлый раз, тут пишут цикл со странным условием:
int i = 0;
while (-1 << i != 0) i++;
System.out.println(i);
Тот, кто написал такой цикл, думает, если при сдвиге младшие биты заполняются нулями, то эти нули сдвинутся в знаковый бит. Однако он ошибается, так реализация сдвигов в Java не выполняется последовательно на любое число бит. Для типа int дистанция вычисляется как mod 32 (для long - mod 64), что дает нам возможные значения 0...31 (или 0...63) соответственно. Следовательно, -1 << 32 == -1 << 0 == -1. А посчитать количество бит можно другим способом:
int i = 0;
for (int x = -1; x != 0; x <<= 1) i++;
System.out.println(i);
И, вообще, авторы не рекомендуют использовать переменную дистанцию для сдвига...
int i = 0;
while (-1 << i != 0) i++;
System.out.println(i);
Тот, кто написал такой цикл, думает, если при сдвиге младшие биты заполняются нулями, то эти нули сдвинутся в знаковый бит. Однако он ошибается, так реализация сдвигов в Java не выполняется последовательно на любое число бит. Для типа int дистанция вычисляется как mod 32 (для long - mod 64), что дает нам возможные значения 0...31 (или 0...63) соответственно. Следовательно, -1 << 32 == -1 << 0 == -1. А посчитать количество бит можно другим способом:
int i = 0;
for (int x = -1; x != 0; x <<= 1) i++;
System.out.println(i);
И, вообще, авторы не рекомендуют использовать переменную дистанцию для сдвига...
среда, 29 августа 2007 г.
Edvard Udu
В поисках сувенира в подарок я забрел в одну лавку. Там понравилась одна картина - дипломная работа Эдварда Уду, молодого художника. Это панорама Таллинна, нарисованная очень яркими красками, но все дома выглядят слепленными (криво-косо) из пластилина. Очень клевый и веселый стиль, оставляющий после себя хорошее настроение!
Картина создавалась именно для этой лавки, но мне пытались намекнуть, что у нее есть цена и при желании... Думаю она была не маленькой, так как рядом были маленькие (13х18) картинки с видами различных достопримечательностей за 300 крон/шт.
Картина создавалась именно для этой лавки, но мне пытались намекнуть, что у нее есть цена и при желании... Думаю она была не маленькой, так как рядом были маленькие (13х18) картинки с видами различных достопримечательностей за 300 крон/шт.
Подписаться на:
Сообщения (Atom)