Обычно кроме сложения у регистров есть операция сложения по модулю 2 и выдача обратного кода. В таком случае вычитание реализуется как сказал corristo в первом посте. Для умножения нужно больше, чем два регистра (хотя бы регистр множимого, множителя, накапливающий сумматор и счётчик тактов). Умножение реализуется или "в лоб" методом накопления частичных остатков, или умножением на несколько цифр множителя (но обычно его реализуют схемным путём матрица одноразрядных сумматоров). Для деления тоже существует машинный алгоритм, он выдаёт по одной цифре частного за один такт.
Вполне согласен. Ведь электрика не гоняют включать/выключать свет и вставлять в розетку вилку кофеварки. А ит-шников, по сути, таки гоняют за мелочами и по таким вопросам, в которых на самом-то деле, стыдно самим не разбираться.
ИМХО: на скриншоте на шрифты смотреть невозможно: как будто под линейку нарисованные вертикальные и горизонтальные линии, а в острых углах цветные разводы.
Повторяю: голосовая почта передаётся через что? Через голосовой канал. Их на базовой станции много. А сигнальный канал один на всех, кто подключён к базовой станции. Поэтому если сигнальный канал будет переполнен один абонентом, то страдать будут все.
Кстати, зря вы байты *голосовой* почты считаете. Голосовой канал это не коммутация пакетов, а коммутация каналов фиксированной ширины (64 кбит/с). Причём с предварительным резервированием по всему пути.
> мс вообще передаются по служебному каналу, а потому вообще ничего не стОят
И именно поэтому их цена должна быть такой, чтобы пользователи не забили служебный канал и не положили сеть своими СМСками.
Плюс, сообщения хранятся на специальном сервере в СМС-центре. Если абонент недоступен СМС-центр будет следить за тем, когда появится абонент, чтобы доставить ему сообщение. Это тоже нагрузка на сеть.
> Обратите внимание, что в Objective-C все методы являются виртуальными, т.е. могут быть переопределены.
Нет, это значит, что используется динамическое связывание.
В примере ниже метод virt_f() виртуальная и при её вызове используется динамическое связывание (используется таблица виртуальных методов для определения адреса настоящего метода вне зависимости от того, каким типом был объявлен объект). Хоть и тип переменной f foo, virt_f() вызывается из bar, так как это настоящий тип переменной.
Метод normal_f() был просто переопределён, но это не важно. Главное, что метод не виртуальный и компиялтор использует статическое связывание. Хоть метод normal_f() и был переопределен, но раз тип переменной f foo, то и normal_f() вызывается из foo.
Или ещё лучше, берём плеер с программным управлением (например mpd) и прикручиваем GUI на скриптовом языке, можно даже веб-интерфейс. Так не придётся писать работу собственно с выводом звука, только управление выводом, и в результате получим GUI. Ведь как я понял из сути проблемы, нужно не только проигрывать звонки, но и ставить музыку. А музыку ставить через крон немного неудобно.
Ещё раз советую вам, хотя бы поверхностно просмотрите документацию m4 (действительно, очень мощный, на нём сделан autoconf а это все скрипты configure, к которым мы так привыкли) и библиотеки Boost для препроцессора Си. Скорее всего, там будет вся нужная вам функциональность.
У вас есть идея, отлично. Но ваш подход страдает. Для того, чтобы реализовать, казалось бы, простейшую подстановку текста (пример из статьи), оказывается, нужно хотя бы знать, где в файле с исходным кодом находятся строки в кавычках. А с усложнением добавляемого синтаксиса потребуется знать о файле исходника гораздо больше и это будет очень-очень сложно сделать при помощи простых строковых функций типа strpos() и substr(). Вам следовало бы почитать несколько книжек о том, как писать компиляторы. Для тех задач, которые вы ставите перед собой, это просто необходимо, иначе вскоре такой препроцессор превратится в большую пачку этих str*() в которых вы сами не разберётесь уже через месяц после того, как написали.
(Да, я помню, это эксперимент. Но эксперименты должны всё-таки служить накоплению знаний/навыков, необходимых для "настоящей работы").
Согласен. Для практического применения могу порекомендовать взять обычный препроцессор C (например cpp из gcc) и посмотреть на библиотеки Boost, там сделаны очень интересные вещи при помощи одного только препроцессора. Ещё можно посмотреть на m4, очень мощный макропроцессор.
Я думаю, что рано или поздно вам придётся написать полноценный парсер PHP. Подумайте, что сделает ваш обработчик лямбда-выражений со следующей строкой:
echo "`What a curious feeling!' said Alice; `I must be shutting up like a telescope.'";
Для того, чтобы распознать, что в этом случае выражение находится в строке, нужно распознать начало строки. А ведь начало строки это не просто " или ', они тоже бывают в строках, экранированные... Так проблемы цепляются одна за другую как снежный ком и придётся писать полноценный парсер.
Указали бы, что рассматриваете случай, когда по ftp заливаете контент на сайт (только сейчас понял о чём вы). Знаете, это не единственный вариант применения ftp. По ftp ещё как бы можно файлами обмениваться.
> Есть ли под windows служба типа sudo
Кликаем правой кнопкой мыши по ярлыку или программе -> Run as administrator. Но сотни тысяч "продвинутых пользователей" всё равно продолжают отключать UAC потому что думают, что сами умнее. И зря.
Кстати, зря вы байты *голосовой* почты считаете. Голосовой канал это не коммутация пакетов, а коммутация каналов фиксированной ширины (64 кбит/с). Причём с предварительным резервированием по всему пути.
И именно поэтому их цена должна быть такой, чтобы пользователи не забили служебный канал и не положили сеть своими СМСками.
Плюс, сообщения хранятся на специальном сервере в СМС-центре. Если абонент недоступен СМС-центр будет следить за тем, когда появится абонент, чтобы доставить ему сообщение. Это тоже нагрузка на сеть.
Нет, это значит, что используется динамическое связывание.
В примере ниже метод virt_f() виртуальная и при её вызове используется динамическое связывание (используется таблица виртуальных методов для определения адреса настоящего метода вне зависимости от того, каким типом был объявлен объект). Хоть и тип переменной f foo, virt_f() вызывается из bar, так как это настоящий тип переменной.
Метод normal_f() был просто переопределён, но это не важно. Главное, что метод не виртуальный и компиялтор использует статическое связывание. Хоть метод normal_f() и был переопределен, но раз тип переменной f foo, то и normal_f() вызывается из foo.
У вас есть идея, отлично. Но ваш подход страдает. Для того, чтобы реализовать, казалось бы, простейшую подстановку текста (пример из статьи), оказывается, нужно хотя бы знать, где в файле с исходным кодом находятся строки в кавычках. А с усложнением добавляемого синтаксиса потребуется знать о файле исходника гораздо больше и это будет очень-очень сложно сделать при помощи простых строковых функций типа strpos() и substr(). Вам следовало бы почитать несколько книжек о том, как писать компиляторы. Для тех задач, которые вы ставите перед собой, это просто необходимо, иначе вскоре такой препроцессор превратится в большую пачку этих str*() в которых вы сами не разберётесь уже через месяц после того, как написали.
(Да, я помню, это эксперимент. Но эксперименты должны всё-таки служить накоплению знаний/навыков, необходимых для "настоящей работы").
echo "`What a curious feeling!' said Alice; `I must be shutting up like a telescope.'";
Для того, чтобы распознать, что в этом случае выражение находится в строке, нужно распознать начало строки. А ведь начало строки это не просто " или ', они тоже бывают в строках, экранированные... Так проблемы цепляются одна за другую как снежный ком и придётся писать полноценный парсер.
Кликаем правой кнопкой мыши по ярлыку или программе -> Run as administrator. Но сотни тысяч "продвинутых пользователей" всё равно продолжают отключать UAC потому что думают, что сами умнее. И зря.
Каким образом svn является альтернативой для ftp?