[Powered by Google Translate] [Электронный статический звуки]
ROB: Хорошо, так что мы только что привел вас в это CS50 пространства.
ALI: Подождите, подождите обратно.
Добро пожаловать в раздел!
ROB: Добро пожаловать в раздел!
ALI: Ура!
ROB: Supersection!
Али: Я Али, и это Роб.
Итак, теперь мы расскажем пространства.
ROB: Так что мы только что привел вас в это CS50 пространства.
Вы будете использовать это много в ваших разделов в этом семестре.
В принципе, мы уже имели загрузке устройства.
И вы можете думать о CS50 пробелы как веб-интерфейс разговаривал с прибором
что мы имеем на некоторые сервера где-то.
Таким образом, вы можете запустить свой код в этом интерфейсе, и мы
увидеть, как делать вещи.
Вы также можете посмотреть на код других людей в этом разделе, и -
ALI: И, как некоторые люди обнаружили, вы можете общаться людям на стороне.
И мы все видим, она тоже, так что это интересно.
Заходите, прийти и сесть.
Садитесь.
>> ROB: Итак, разделы -
ALI: Нет, нет, вы, ребята, можете прийти.
ROB: Разделы будет гораздо более интерактивным в этом семестре.
ALI: О, он как -
Ох.
Хорошо, прохладно.
Так что, если вы, ребята, просто приходят, вы можете перейти на эту ссылку, если я могу получить
там, прямо там.
Мы не можем написать, потому что нет места на плате, но ссылку
прямо здесь, иди к этому на вашем компьютере, и вы войдете CS50
Пространства, которое является довольно круто.
Хорошо.
Есть ли у вас проблемы?
ROB: Таким образом, вы можете найти проблемы -
Мы должны быть в состоянии написать это где-нибудь.
Так что, если вы идете в cs50.net/psets и это хакер supersection -
и вы идете в Hacker издание PSET один, посмотрите на спецификации
где-то на странице -
>> Али: В общем, в то время как Роб смотрит, что мы собираемся делать в
раздел сегодня есть раздел проблем -
ROB: - на странице восемь.
ALI: - называется часть проблемы -
ROB: Раздел вопросов.
ALI: Извините, раздел вопросов.
И это то, что мы собираемся перейти -
те, что мы собираемся перейти на сегодняшний день в разделе.
И мы собираемся, чтобы закодировать его на CS50 пространства, и мы надеемся, что будет работать.
И мы можем только говорить через них.
И вы, ребята, можете задавать вопросы, когда вы чувствуете -
>> ROB: Итак, это добирается, чтобы быть обычным явлением в большинстве psets.
Я думаю, что с этим, он говорит, вы не должны вручить эти вопросы дюйма
Но идея в том, что эти вопросы ставятся на PSET, и вы можете прийти
раздел, чтобы эти вопросы ответил.
Или, если вы не придете в разделе, вы можете ответить на них по своему усмотрению или получать
помощь в нерабочее время или что-то еще.
Но эти вопросы, которые, как предполагается, подготовительные вас за проблема набора.
А на хакера издание, много вопросов может быть просто о
расширение текущих знаниях CS.
ALI: Да, довольно много.
>> Хорошо, таким образом, есть все на CS50 пространства?
Привет, заходи
Выступающий 1: Можем ли мы увидеть URL еще раз?
Роб: Да, это будет легче, когда вы на самом деле в вашей секции и
ваша TF просто может вам по электронной почте URL заранее.
ALI: Yay, занять место.
Есть места здесь.
Передняя панель не так уж плохо.
Что?
Таким образом, CS50 пространства, мы получаем там.
Кто-нибудь есть какие-либо вопросы, прежде чем мы перейдем к - что?
ROB: Там нет даже мел.
[Неразборчиво]
ALI: Извините.
Вы можете использовать ваши ногти?
Мы находимся в очень низких технологий комната для очень высокотехнологичный класс.
Ладно, это все доброе?
Кто-нибудь есть еще вопросы по этому поводу?
Как я уже говорил, мы собираемся пройти через раздел вопросов
PSET спецификаций.
Таким образом, есть только несколько проблем, которые мы собираемся
код в CS50 пространства.
Все ли хорошо?
Хорошо.
Хорошо?
ROB: Есть ли у Вас ноутбук?
ALI: Вы можете пообщаться с Лукасом.
Он сидит рядом с вами.
Склеивание времени.
>> ROB: Итак, начнем с первой проблемой?
ALI: Да.
Мы можем начать.
Вы хотите меня -
Я могу пойти.
Итак, мы пойдем в PSET функции.
Ах, зачем же это такое -
ROB: Control.
ALI: Итак, мы идем в ответ на эти вещи, а?
ROB: О, да.
Так что -
ALI: О, сделал все часы Роба главных ролях шорты?
Хорошо, прохладно.
ROB: Да, я не думаю, что мы обязательно ожидал, что вы есть
смотрел его до приезда в данном разделе, но мы можем обсуждать эти
проблемы заранее, так как они, в разделе вопросов вещи.
Так что если вы еще не смотрели его, не волнуйтесь.
Те, кто может попытаться ответить.
>> Итак, первый вопрос, что является пре-процессоре, каким # включить
относиться?
Так кто-нибудь есть ответ на это?
Али: Вы, ребята, можете говорить это.
Конечно, идти вперед.
SPEAKER 2: # включить некоторые заранее написанные кодом, и вместо того,
копирование и вставка его в вашу программу, просто говорю включить его,
предварительной обработки знает, что он там и что он должен добавить его в
позже или раньше ничего не происходит.
ALI: Да, удивительный.
Cool.
ROB: Итак, когда вы на самом деле компиляции программы, предварительно процессор это
Первым шагом.
Компиляция происходит в четыре большие шаги.
Так предварительной обработки является первой большой, и именно это парень, который идет
путем и ищет все эти хэш-символы.
И любая строка, которая начинается с символа, предварительно процессор смотрит на него и видит,
если он может его обработать.
Таким образом, # включить рассказывает предварительной обработки искать какие-то cs50.h
файл и просто скопировать и вставить его содержимое в этот файл.
Таким образом, вы действительно можете # включить все, что угодно, но это в основном будет
. Ч файлы.
Мы еще не дошли до # определить еще, так что не имеет значения.
Али: Да, мы хорошие на том.
Кто-нибудь есть какие-либо вопросы по этому поводу?
Разве мы хорошо?
Следующий вопрос.
>> Выступающий 3: В краткосрочной было что-то о С, а также.?
Разве что соответствующие или это не имеет значения?
ROB: о с с предварительной обработки.?
Выступающий 3: Да, или я сделал что-то?
ROB: Так коротко можно было бы показывать предварительной обработки этого файла и
. выводить его в другой файл с, так что вы можете предварительно обработать этот файл -
когда вы просто работать, как, сделать привет или лязг hello.c, вы делаете все
компиляции в один большой шаг.
Но вы можете сделать это явно на отдельные шаги.
Итак, сначала вы можете предварительно обработать.
Тогда вы можете скомпилировать, то можно собрать, а затем вы можете связать.
Мы доберемся до тех, других.
Но предварительной обработки, вы вроде предварительной обработки, а затем он переходит в
другое. с файлом.
Потому что предварительная обработка действительно не изменится ничего.
Это просто куча копирования и вставки.
Вы можете вручную скопировать и вставить его самостоятельно.
ALI. И чтобы было ясно, с файл представляет собой файл C, так что это
написано в код C.
Таким образом, он собирается из кода C кода C.
Ты просто добавить больше кода с фунта.
ROB: Когда вы предварительно обработаны, она все еще действительный файл C.
Выступающий 3: Хорошо.
ALI: Хороший вопрос.
Мне это нравится.
Хорошо, следующий вопрос.
>> Что такое компилятор?
Любой?
Да.
Выступающий 4: Он изменяет предварительной обработки кода в сборке.
ALI: Perfect.
ROB: Да.
ALI: Круто.
ROB: Так вот что компилятор делает специально
когда мы используем Clang.
В самом общем смысле, компилятор точно так же как с кодом на одном языке
и превращение его в другой язык.
Таким образом, в C -
или, ну, Clang принимает код, который находится в C и превращения его в сборку.
И вы не должны быть в состоянии понять сборку на всех.
Но это язык, на котором он превратив его в.
>> ALI: Хорошо.
И потом, что это ассемблер?
Любой?
SPEAKER 5: [неразборчиво] в двоичную?
ALI: Извините, что?
SPEAKER 5: [неразборчиво] в двоичную?
ROB: Да.
ALI: Да.
ROB: Так ассемблер -
ассемблерный код очень, очень близко к тому, что ваш компьютер может понять,
Но помните, что он не совсем понимает текст
то есть ассемблере.
Вы должны преобразовать его в прямой 1 и 0.
Это похоже на процесс прямого перевода.
Мы могли бы просто дать вам таблицу, которая отображает то, что каждый
инструкция по монтажу средств.
Но ассемблер просто делать этот перевод для вас.
Это преобразование кода сборки в 1 и 0.
>> ALI: И потом, для последнего, что компоновщик?
И как-lcs50 относиться?
Любой?
ROB: Это самая сложная и наименее объяснил один в компилятор видео.
ALI: Кто-нибудь помнит проводы lcs50 в команде?
SPEAKER 6: Когда Вы зашли на сделать.
ALI: Это в сделать.
Да, прохладно, хорошо.
Есть ли какие-либо предположения или расплывчатые - да, идут.
SPEAKER 7: Я не уверен, потому что ваша короткая было действительно [неразборчиво], но это было
что-то делать отдельные файлы с каждой библиотеке, а затем положить
их все вместе в одной библиотеке?
ROB: Да.
Поэтому, когда у вас есть hello.c, это очень простой программы.
Вы действительно делаете только одну вещь в этом.
Но когда вы попадаете в других программах -
и я думаю, даже если вы GetString в своих программах, вам нужно, чтобы начать
включая другие файлы.
Таким образом, библиотека CS50 является одним из таких файлов, в которых у нас есть реализаций
из GetString и GetInt и все эти вещи.
Так что компоновщик делает это идет вокруг, глядя через все эти
Файлы, видя, где функции определены, убедившись, что когда я звоню
GetString где-то, он знает, что GetString означает, что это
GetString более в CS50 библиотеки.
Таким образом, компоновщик просто принимает все эти файлы, разбивает их вместе, и теперь
у вас есть исполняемый файл.
Так что имейте в виду, что если вы используете CS50 библиотеку, необходимо как
# Включить в верхней части, а затем и в вашей марки команду, как вы
сказал, вы должны иметь-lcs50.
Таким образом, вы не можете просто есть.
Так что это просто что-то, чтобы иметь в виду на будущее.
>> SPEAKER 8: Итак, предположим, что была еще одна библиотека, как cs51.h, мы бы
Также нужно добавить, lcs51?
ROB: Единственная причина этого-lcs50 работает прекрасно, потому что мы есть, что набор
в определенное место в вашей техникой, так что он знает, что
-Lcs50 средств.
Мы могли бы просто дать вам cs50.c файл, а затем вы можете скомпилировать его, сказав,
Clang hello.c cs50.c, а затем это сделает ваш исполняемый файл, положив
эти два файла вместе.
Она знает, что-lcs50 означает cs50.c более в некотором каталоге, который мы указали в
Ваши приборы.
Так что если вы хотели cs51.c быть точно определен путем просто говорю-lcs51,
то мы также должны положить его в этом каталоге поэтому он знает, где
искать.
ALI: Каким был ваш вопрос?
>> SPEAKER 7: Почему вы должны связать CS50
если - wasn't его скопировать / вставить на первом этапе, когда вы предварительно обработанные это?
ALI: Вы хотите взять?
ROB: Конечно.
Так cs50.h файла отдельно от cs50.c файл C.
Вы добрались до прототипов функций в классе?
Хорошо.
Так в основном, файл cs50.h просто будет скопировать и вставить -
ALI: Вы, ребята, знаете, что подписи?
Итак, довольно много, если вы посмотрите на -
ROB: Давайте представим, cs50.h нет.
Теперь этот файл -
Вы делаете = GetString строка с.
Но когда мы дошли до этой точки в коде, он понятия не имеет, что
GetString есть.
Он знает, что это функция, так как вы называете его.
Но он не знает, что это на самом деле должна возвращать строку.
Так как я уже сказал, строка S = GetInt, это не имеет никакого смысла, так как
Вы подписанием целого числа в строку.
Но он не знает, что GetString имеет смысл, потому что она не
Известно, что GetString возвращает строку.
Так что cs50.h говорит что-то вроде этого.
ALI: Так что Роб печатает том, что это обещание таким образом, что она собирается
есть эта функция называется GetString.
ROB: Это все, что cs50.h будет скопировать и вставить сюда, а также
GetInt как и все эти вещи.
И это просто говорит, что GetString ли возвращать строку.
Вы не знаете, как это реализовано, но когда мы доберемся до этой линии, в настоящее время
он знает, что правильно возвращает строку.
>> SPEAKER 9: Итак, если мы не беспокоились # включить вещь, и вместо
просто написал прототип для тех, что мы на самом деле собираемся использовать?
ROB: Да.
Так давайте запустим это.
SPEAKER 9: Что это?
Так, по умолчанию, он будет делать-л до CS50 только потому, что -.
ROB: - выражение.
Али: Да, потому что, как вы сказали, это в марку файл.
ROB: cs50.h также, случается, ЬурейеЕ символ * в строку.
Вы можете полностью игнорировать то, что это означает, что в настоящее время.
Но это также то, что включено в cs50.h.
Так что теперь все работает прекрасно.
Она работает точно так же, как это было, когда мы только что
# включить.
И так происходит, в том числе cs50.h более-включают такие вещи, что вам нужно -
как, вы не используете GetInt в этой программе, но это не имеет значения.
Это будет просто игнорировать его.
ALI: А потом, когда вы делаете-lcs50 здесь и здесь, то, что происходит
на то, что это имеющей фактическое реализуемых код.
Так вот где он на самом деле, делать -
написание кода для GetString.
Так что это не просто обещание больше.
Это на самом деле переживает и принимает строку и все такое.
Смысл?
Вопросы? Хорошо.
Cool Beans.
>> ROB: Теперь мы можем перейти к собственно код.
ALI: Хорошо.
Так вот первая проблема.
Так он говорит написать программу, которая запрашивает у пользователя строчные
буква, а затем преобразует его в верхний регистр без использования Побитовая
операций, в соответствии с образцом выхода ниже.
Таким образом, вы видите, вы запустите программу с. / A.out, и тогда вы
собираюсь поставить в нижнем регистре, а затем ваша программа должна выдать капитал
A. Так почему бы не вы, ребята, все его застрелили на CS50 пространства?
Так что вы, ребята, все это может пойти сюда.
И вы можете удалить весь код здесь.
И тогда вы можете пойти дальше и начать кодирование вещь.
ROB: Вы, вероятно, хотите использовать GetChar, это
включены в CS50 библиотеки.
ALI: Я думаю, было бы лучше, если вы сохраните верхней части.
Таким образом, вы можете просто изменить вещи в середину.
Идем дальше и работать.
Не стесняйтесь работать друг с другом.
Роб: И вы можете задавать вопросы, если у вас есть -
>> SPEAKER 10: Что такое операция побитового?
ROB: так, не обращайте внимания, что по этой проблеме.
ALI: Если вы не знаете, что это хорошо.
ROB: Мы собираемся использовать его в следующей проблемой.
Но если вы не знаете, что оператор побитового в том, что все в порядке.
SPEAKER 10: Является ли, что, как превратить его в ASCII код?
ALI: Нет
ROB: Нет.
Вы можете сделать это по этой проблеме.
SPEAKER 10: Как ты это делаешь?
Так что, если бы у меня было где-то писать -
ALI: Или что-то писать.
ROB: Я мог бы просто какая-то типа в этом.
ALI: тип на самом верху.
ROB: О, я сижу на микрофон.
>> Итак, мы видели в лекции, что ASCII значение для столицы составляет 65 лет.
И капитала B будет 66, и так далее.
Таким образом, вы буквально можете использовать 'A' для обозначения числа 65.
Мол, это значение 65.
Я могу сделать что-то вроде Int х = 100 - 'A'. А теперь х будет иметь значение
100 - 65.
ALI: Вы можете бежать, что и показать, что.
Ну, может быть, нет.
Ничего.
ROB: Я должен был распечатать его.
SPEAKER 10: Как превратить его обратно в характере?
ALI: Так что если вы не -
Вы просто заставить его быть символ, равны.
ROB: Так что есть -
Различие между символов и целое только с точки зрения размера.
Таким образом, целое бывает, чтобы иметь возможность представлять вещи
на, вроде бы, четыре миллиарда.
Символ может только представлять вещи вплоть до 255.
Но нет никакой разницы между ними, кроме этого.
Таким образом, можно сказать, символ с = 65.
Это равносильно тому, символ с равным 'A'.
ALI: О, нет.
Это не реально сэкономить вещи.
ROB: Нет, вы не можете этого сделать.
ALI: Это просто -
[Стоны]
>> ROB: Ладно, так что Али был просто написал программу, которая сначала печатает 100 -
'A' как целое число, которое было 35, как мы ожидаем, потому что 100 минус ASCII
значение равно 65.
Потом распечатать с помощью% C, что означает, интерпретировать его как символ.
Так что 100 - это 35.
Интерпретация, что в качестве символа, случается, хэш-символа.
Если вы посмотрите на asciitable.com или любой другой, вы увидите, что 35 является
хэш-символа.
ALI: Хорошо, любые другие разъяснения о проблеме?
Ладно, вы, ребята, можете пойти дальше и сделать это тогда.
Не стесняйтесь задавать вопросы или разговаривать друг с другом.
Или, если вы уже сделали, вы можете расслабиться.
>> Лукас: Являются ли они того же класса, все строчные буквы в порядке и
Также заглавными также в порядке, потому что это что-то полезное для
проблемы.
ALI: Хороший вопрос, Лукас.
Таким образом, вы, ребята, все это взял?
SPEAKER 11: Да.
Вот как вы это делаете, не так ли?
ALI: Верно.
ROB: Да.
SPEAKER 11: [неразборчиво]
ALI: Все правильно.
ROB: Какой вопрос спрашиваете?
Просто для преобразования -
ALI: преобразование нижнего регистра в верхний регистр.
Вот и все.
ROB: Хорошо.
ALI: Должны ли мы писать?
Я думаю, мы просто смотрим на кого-то другого.
ROB: Так что для тех, кто мог бы застрять, способ -
если у меня есть некоторый символ с, скажем, это происходит с буквой D.
Так что теперь, как я могу выяснить, какие буквы алфавита С?
Не D, но я имею в виду, D, случается, четвертая буква алфавита.
И если мы начнем отсчет с 0, то это третья буква алфавита.
Так что, если это 0, B = 1, C = 2, D 3, как я могу выяснить, внутр позиции -
какую позицию в алфавите C находится в?
У кого-нибудь есть идеи?
Али: Я думаю, что все они кодирования.
ROB: А как насчет первого?
SPEAKER 12: Так что это, вычесть первый?
ROB: Да.
ALI: Да, удивительный.
Таким образом, можно сделать капитал D -
ой, извините.
Вы берете характер и вычесть первую, как вы сказали.
ROB: D Так что, если это что-то вроде 68, и мы вычитаем, что на 65, то получим
3, говоря нам, что D является третьей буквы алфавита
начиная с 0.
Таким образом, вы можете его использовать.
Теперь мы знаем, что буквы алфавита, с точки зрения
заглавные буквы, или -
мы могли бы сделать то же самое для строчных букв, чтобы выяснить, что
строчные позиции мы дюйма
И мы можем использовать, чтобы затем преобразовать в верхний регистр помощью
очень похожие идеи.
Спросите предложения?
>> ALI: Ребята, вы - Подожди, я не знаю, как далеко вы, ребята.
Ли большинство из вас сделали, вы все еще работает, ты застрял?
Вы, ребята, можете кричать -
застрял.
Один человек застрял.
Cool.
Я, как правило, застрял, тоже.
SPEAKER 13: я сделал.
ALI: вы сделали?
Хорошо.
Готово.
SPEAKER 13: [неразборчиво]
ALI: Да, здорово.
Вы проверяете, что это в нижнем регистре форме?
Хорошо, прохладно.
Где находятся другие люди?
Помогло ли это намек помочь вам, как и для не-прилипание себя?
SPEAKER 14: Не совсем, но только потому, что я не знаю, я не
перевариванием еще.
ALI: Хорошо, прохладно.
Вы хотите попробовать -
или вы хотите пойти и поговорить?
>> ROB: То, что я собираюсь сказать, -
так что использование этого.
Вы понимаете, как мы получили то, что положение в алфавите
Письмо находится в?
SPEAKER 14: Итак, когда вы положили вещи в одной цитате,
, которая возвращает число?
ROB: Да.
Она будет переведена на ASCII значение он представляет.
Так что вы хотите пойти в таблице ASCII или что это такое?
ALI: Только один из них?
ROB: Да.
Поэтому, когда вы положите любой из этих символов, игнорируя много -
ALI: [неразборчиво]
ROB: Да, с помощью курсора.
ALI: Да.
Это было захватывающее.
ROB: Таким образом, игнорирование этих те, слева, которые являются специальными символами -
если вы положите любой из этих символов в одинарные кавычки, то это будет
перевод этого значения слева.
ALI: Это десятичное число для него.
Это как матчи с 65, B 66, и вы заметите, что все они в
алфавитном порядке, что делает разницу.
Так что, как говорит Роб, и прежде, в этом коде, мы были вычисления расстояния от
Первая буква, как таковой.
И это будет то же самое, будь то верхний или нижний регистр.
ROB: Итак, когда мы сделали D, 68 минус 65, получаем 3.
Поскольку D составляет три позиции в алфавите.
ALI: Итак, как бы вы перевести, что более, чтобы найти маленькую D?
ROB: Да.
Так что, если у меня есть 3 теперь, я знаю, я хочу пойти на три буквы -
Мы, оказывается, собирается строчной сейчас, но, скажем, я хочу пойти три
позиции в нижнем регистре сторона вещей.
Так как я могу это сделать?
Я знаю, нижний регистр составляет 97.
Так как я могу найти три позиции в строчных букв?
>> SPEAKER 15: У меня есть один вопрос, на самом деле.
ALI: Да, идти вперед.
SPEAKER 15: Так для этого, это действительно не имеет значения, если я знаю, что это положение,
нравится, мне не нужна эта таблица.
ROB: Нет.
Вам никогда не придется использовать любое из этих чисел.
И это важный момент в вашей программе, что вы никогда не должны жестко
код любого из этих констант.
Используйте 'A'. Никогда не используйте 65 или 97.
ALI: Те, кто называют магией чисел, и они действительно запутанной.
Мол, при отладке кода, вы не могли бы вспомнить, что
Вы использовали их для.
И для нас классификации кода, мы не знаем, что
Вы используете их.
Поэтому лучше, если вы собираетесь использовать символы, так что делает
больше смысла для людей.
Хорошо, любые другие вопросы?
Больше людей сделали, или -
Я думаю, мы можем проверить.
Это действительно жутко, что вы можете увидеть код людей.
ROB: Да.
Мы не должны этого делать.
Мы не знаем имен людей, либо.
ALI: О, да, хорошо, что делает его лучше, так что мы будем еще более беспристрастный
вместо того, чтобы просто случайно выбирая кого-то.
Не волнуйтесь.
Я не буду это делать.
Если у вас есть случайные вещи, о - не беда.
Хорошо.
Как делают люди?
>> SPEAKER 17: Так девятой строке должна вывести характер?
ROB: Да.
ALI: Да.
Так что, если вы идете вниз -
ROB: Ой, не могу этого сделать.
ALI: Вы увидите, что он напечатал хэш-символа.
SPEAKER 17: О, все в порядке.
ROB: Я думаю иначе, Вы можете смотреть на вещи мы печати двух
символы.
Сначала один Мы печатаем это письмо А.
Следующий Мы печатаем только 65.
Это, наверное, кричать на меня за это.
Поэтому, если мы просто запустить это, вы заметите, что она печатает оба раза.
Потому что мы просим это то же самое.
Мы просим его, чтобы напечатать букву А. И тогда мы просим его, чтобы печать
№ 65 интерпретируется как символ, который то же самое.
ALI: У вас есть что сказать?
О, я просто шучу, извините.
Ладно, как люди -
ROB: Мы можем просто пройти через это.
>> ALI: Итак, с чего начать?
Любой?
Как намек, что мы должны получить что-то от людей, от typers.
SPEAKER 18: [неразборчиво]
ALI: Ах да, быстрый, отлично.
Таким образом, мы наберем -
Что мы печатаем?
Любой?
Или я должен просто ввести его?
Неужели мы на самом деле ввод -
ROB: Конечно.
ALI: Таким образом, мы наберем Printf чтобы побудить его, так что мы можем быть
нравится, дай мне знак.
Хорошо, а что потом?
Почему она это делает?
Роб: Я не знаю.
ALI: Хорошо.
Так что теперь, мы говорим им, чтобы дать нам характер.
Но тогда как же вы на самом деле получить этот символ?
SPEAKER 19: Использование GetString.
ALI: GetString?
GetChar?
Хорошо, так в чем же разница между строк и символов?
SPEAKER 19: Строки серии, как массив символов.
>> ALI: Cool, да.
Так что в этой проблеме, нам нужно только рассмотреть один символ за раз, так что
мы только собираемся делать GetChar для этого экземпляра.
ROB: Мы могли бы реализовать функцию, если мы хотим, что взял всю строку
и подошел строку и все изменилось нижнего регистра в верхний регистр и все
верхнего регистра в нижний регистр.
Но здесь, мы просто просим Вас за один символ.
Али: Теперь у нас есть характер здесь, но тогда мы должны его сохранить.
И тогда мы добавим символ с - что?
SPEAKER 20: Определение переменных.
ALI: Да, именно так.
Так что у нас есть характер.
Роб: Я думаю, что вы могли бы быть -
Вы только три места в, поэтому он кричит на вас.
>> ALI: Хорошо, прохладно, теперь, когда мы табуляции множество, что происходит дальше?
Какой следующий шаг?
ROB: Что наша программа должна сделать, это изменить строчной буквы, чтобы
заглавной буквы.
Что делать, если я случайно ввести хэш-символом?
Разве что -
Али: Это хороший символ.
Мы используем это много.
ROB: Это действительно вещь, я могу преобразовать в верхний регистр форме?
SPEAKER 21: Нет.
ALI: Нет
Мы должны проверить это.
Таким образом, мы можем иметь, если заявление проверку, так что если с больше
или равна a'строчная '-
Таким образом, если мы посмотрим на график, можно заметить, что оно должно быть между здесь,
на 97 и строчные.
И это может быть любой из них, и с шагом весь путь вниз.
А тут еще г на 122.
И она должна находиться между этими двумя значениями.
Имеет ли это смысл?
ROB: Так что, если с не между 97 и 122 -
или вы никогда не должны использовать эти цифры - если с не между "а" и
'Г', то это не является допустимым символом для нас в верхний регистр.
ALI: Так в коде формы, мы говорим, что если с больше или равна одной
случае строчной -
ничего себе, как ты говоришь?
Ладно, больше или равно 'а' в нижнем регистре, и она должна быть выше
строчная "г". Таким образом, она должна быть меньше или равна нижнему регистру 'Z'.
Мы делаем уверен, что это между ними.
Тогда мы можем продолжать с нашей счастливой код.
Что?
ROB: Я полагал, что мы бы просто продолжать спрашивать, если мы, оказывается, не имеют
строчной буквы.
ALI: О, я не знал об этом.
Извините.
>> Итак, если мы собираемся делать, как говорит Роб, и убедиться, что -
мы можем продолжать спрашивать их, то, что мы должны делать?
SPEAKER 22: [неразборчиво]
ROB: Да.
Мы должны использовать своего рода цикл.
Поскольку пользователь может ввести что-нибудь неправильное невыразимое количество раз.
Таким образом, вы можете использовать цикл.
Цель сделай то время как цикл -
буквально, единственный раз за всю свою жизнь вы будете когда-либо использовать делать-
в то время как петли, когда вы просите для пользовательского ввода.
Поэтому тот факт, мы просим для пользовательского ввода здесь намек, что мы должны
использовать DO-цикла.
И почему это?
Потому что делать-пока петля всегда происходит по крайней мере, один раз.
Поэтому, когда вы спрашиваете, для ввода данных пользователем, вы хотите, чтобы это произошло по крайней мере, один раз.
И потом, если все было успешно, можно продолжать.
Если нет, вернуться и спросить еще раз.
>> ALI: Итак, другими словами, мы должны сделать раздел.
И так это говорю это, чтобы что-то сделать.
Так Printf -
распечатать заявления, приглашения, а также получить символ, или попытка
получить характер.
И тогда мы должны проверить, если он действительно сделал это правильно.
Таким образом, мы добавим условия, то мы говорим, а потом у нас есть
условный оператор.
ROB: Но теперь мы изменили ход мысли.
Теперь мы изначально говорили, если с этого диапазона, это справедливо.
Теперь мы хотим обратить вспять этот процесс и говорить, если с не находится в этом диапазоне, то мы
необходимо создать резервную делать вещи снова.
ALI: О, да.
ROB: Так что пока это не так, мы хотим вернуться назад и
попросить другого характера.
Все ли видели?
Вопросов по этому поводу?
Хорошо.
>> Так что теперь у нас есть действующий характер, что мы можем верхний регистр.
ALI: Итак, что следующим шагом для него верхний регистр?
SPEAKER 23: добавить 32.
ALI: Вы добавляете -
Простите, что?
SPEAKER 23: Вы не можете просто добавить 32?
ROB: Так что да, не с точки зрения магии чисел.
Вы должны использовать только одинарные кавычки вещи.
SPEAKER 23: Ладно, хорошо -
Роб: Но вы можете получить 32 -
ALI: Как Вы получите номер 32, я думаю, это то, что мы говорим.
SPEAKER 23: [неразборчиво]
ROB: Итак, мы можем придумать номер 32 вместе -
SPEAKER 23: [неразборчиво]?
ROB: Да.
Но если мы собираемся делать это в два этапа мы делали раньше с
положение вещей.
Таким образом, положение в алфавите, что с случается, есть с минусом строчные
'А'. Так что, если мы вошли в нижний регистр 'D', позиция будет 3.
А теперь мы хотим, чтобы взять вещи с прописной круг вещей.
Так что теперь наш новый C будет 'A' капитала плюс положении.
Так что люди видят, как это подводит нас -
Мы движемся от строчной диапазон, точную глубину, мы были в это
диапазона, и спускаясь в верхнем регистре диапазона, и собирается, что далеко
в нее снова, которая будет такой же характер, но теперь
верхний регистр.
ALI: А для людей, которые были сбиты с толку тем, как он только что сказал, 32,
в основном он совмещал обе эти в одном заявлении.
Таким образом, эквивалентный способ записи этого сказать, что вы можете просто вид
заменить позицию, с минусом ", и положил его прямо здесь.
Таким образом, то, что он сделал, я не -
символ newc = прописные 'A' плюс с минусом нижний регистр 'A'. И потому, что алгебры,
Вы можете перемещать их.
Можно также сказать, что вы можете переместить его вокруг так символ newc = прописные 'A'
минус нижний регистр 'A' плюс с.
И это, вы заметите, если мы вернемся к графику.
У нас есть верхний регистр составляет 65 и нижний регистр составляет 97.
Таким образом, 65 - 97, -32.
>> Привет.
Садитесь.
Ох.
Вы можете сидеть прямо здесь.
Круто, хорошо, удивительный.
Добро пожаловать в раздел.
Вы заметите, что разница составляет 32.
Так вот откуда у него этот номер.
Но это не так, как Роб говорит, лучший способ сделать это, потому что она имеет странное
Магия путаницы номер.
ROB: Вы должны использовать капитал минус нижний регистр.
Вы не должны использовать только прямые 32.
SPEAKER 24: Почему, что, опять?
Почему бы вам не использовать 32?
ALI: Если мы это сделали, это было бы символ newc = -32 + с.
И если вы не видите в остальном, если это все ушло, и вы
просто увидеть эту одну линию, то, как вы знаете, что 32 является отрицательным?
Это просто неуместно.
ROB: Так что ваша программа будет работать совершенно нормально.
Это просто стиль вещь.
Кто-то собирается в и чтение вашего кода, они как то, что делает 32 имеешь в виду?
Может быть, они не -
Я, вероятно, не сразу понимаешь, что 32 бывает
Разница между строчной буквы и прописные буквы, хотя
Мы собираемся использовать этот факт в следующей проблеме.
32, -
Вы можете оставить комментарий выше говорили 32 является разница между
'A' и '.' Но в тот момент, почему бы не использовать 'A' и 'а', и вы
не нуждаются в комментарии пор.
>> ALI: Это просто способы над ним много чище, стиль стрелки.
И так, поскольку вы только начинаете программирование -
или я думаю, нет, так как вы хакер EDI - не беда.
Это просто хороший способ есть -
лучше иметь лучшую стиле.
Это проще для других людей, чтобы читать.
ROB: Вы никогда не должны помнить таблицу ASCII, никогда.
Вы просто должны быть в состоянии использовать одну кавычку.
Вопросы?
ALI: Все хорошо?
ROB: Хорошо.
Так что в следующий проблема является существенной.
Таким образом, следующая задача требует от нас -
ALI: Следующая проблема не просит нас сделать то же самое, но использовать
битовые операторы.
ROB: И, конечно, мы не видели битовые операторы пока нет.
Поэтому мы сейчас обсудим те.
ALI: быть возбуждены.
Они супер весело.
>> ROB: Так регулярных операторов, таких как х плюс у, минус, умножение, деление.
ALI: Введите его в этой строке.
Роб: Там также%, если вы еще не видели его, которое можно использовать в
Символ процента.
Но мы не будем использовать их для этой проблемы.
Мы хотим использовать битовые операторы.
Теперь помните, мы привезли его в лекции один.
Я не уверен, если мы обсуждали двоичной дальше.
Но помните, что каждое число представляется -
Ну, все -
представлена ​​в 1 и 0 в двоичном виде.
Таким образом, это означает, что когда я говорю, № 8, я знаю, что это
как, 1000.
Что битовые операторы сообщите нам сделать, это работать на этих битов -
будет работать на этих битов напрямую.
Теперь я уже не дело в отношении восьми.
Я имею дело с точки зрения 1000, и я хочу сделать что-то с теми,
отдельных битов.
Так Али написал битовые операторы здесь, но that's -
Номер 8, мы будем использовать как один из наших номеров пример.
А двоичным представлением 1000.
Мы будем использовать другой номер, 5 -
на самом деле мы будем использовать 9 и 5.
И 5 в двоичном представлении 00 -
0101.
Али: Все ли хорошо на этом?
Двоичный вещи?
Именно от первой лекции?
>> ROB: Так что даже если вы не совсем на вершине, как преобразовать вещи
двоичный, это не совсем важно для этой проблемы.
Мы будем использовать это, но вы будете иметь гораздо больше шансов выяснить, как
быстро изменить ситуацию в двоичный.
Таким образом, используя 9 и 5, теперь у нас есть битовые операторы.
Да, и еще, 9 и 5, если это целое число, то на самом деле это 32 бит,
которая означает, что мы как 0, 0, 0, 0 много раз, то
101 на самого конца.
Это просто, потому что, независимо от того, что вы делаете, в целых числах, 32 бит.
Просто потому, что нам нужно только четыре бита представляют 9 не значит, что мы не
с использованием до другого 27 бит только для 0s.
ALI: Просто чтобы прояснить, одно из этих чисел это 0 или 1, немного.
Это одна 4 бита.
Как же так Роб сказал, что машины хранить их в 32.
Таким образом, то они будут иметь 32 либо 0, либо 1.
Круто?
ROB: битовые операторы.
Первое, что мы будем иметь дело с, давайте сделаем &.
Так что если мы делаем 9 и 5.
Так что и делает это, по крупицам, он сравнивает биты из двух чисел
и если оба числа равны 1, то она вернет 1.
Если это 0, а другой равен 1, или оба 0s, то она возвращает 0.
Таким образом, вы можете думать об этом как логические НСРА.
Как нужно Верный и Истинный, чтобы вернуться верно, но истинным и ложным является ложным.
Так что это то же самое, но теперь мы имеем дело с ней только с битами.
>> ALI: Так что, если вы посмотрите на это, вы будете иметь 1 -
Вы выстроить их, так что это будет 1 и 0.
Вы, ребята, думаете, что было бы - что бы это оценить, чтобы?
SPEAKER 25: 1.
ALI: Круто.
Или нет.
Извините.
Так что это имеет смысл?
Так что это коллективный ответ снова?
Извините.
Так что, если у нас 1 и 0, то, что вы получаете?
ROB: Так вы думаете, как вы говорите, и вслух.
Если у вас есть два бита х и у, необходимо х и у равным 1, для того,
оценить, верно - или для того, чтобы его оценить, 1.
Если х и у равны 0, то оно оценивается как ложное или 0.
Лукас: Это хорошо, чтобы помнить также, что 1 является истинным и 0 неверно.
Так что если у вас есть истинное и ложное, это ложь.
Но потом, правда и правда, правда.
Ложные и ложно, ложно.
ALI: у нас есть истинное и ложное.
Таким образом, 1 и 0.
Таким образом, опять же, извините, еще раз?
SPEAKER 25: Было бы 0.
Да, круто.
И тогда мы имеем 0 и 1 -
SPEAKER 25: [неразборчиво]
ALI: Да.
Таким образом, вы всегда можете обменять их на -
Тогда, если у вас есть 0 и 0?
SPEAKER 4: 1?
0?
ROB: Так это 0.
Это не то, что оба номера должны быть одинаковыми.
Это что оба номера должны быть 1.
ALI: Так как есть, чтобы быть правдой для того, чтобы быть правдой.
Так что это 0.
И тогда у вас есть 1% 1, который является?
ROB: Это довольно хорошие цифры.
У них есть все возможности -
ALI: Хорошая работа, ничего себе.
Хорошо, прохладно.
Так ли это смысл для всех?
>> ROB: Итак, теперь мы будем делать |.
И это будет очень похоже, но теперь вместо х и у нуждающихся в
быть 1 для того, чтобы оценить к одному, то это просто х или
У должна быть 1.
ALI: Так 1 | 0 вычисляется -
КЛАСС: 1.
ALI: Круто.
0 | 1 вычисляет -
КЛАСС: 1.
ALI: Cool, а затем 0 | 0 -
КЛАСС: 0.
Али: Да, а потом 1 | 1 -
КЛАСС: 1.
ALI: Круто.
Так вот, как две битовые операторы.
Awesome.
ROB: Итак, теперь мы будем делать ^.
ALI: мы должны сделать все от них?
ROB: Да, потому что я думаю, что мы собираемся его использовать -
использование их всех.
ALI: Хорошо.
Так что -
Роб: Я думаю, мы не должны.
ALI: Так ^ работ в том, что вы должны иметь ровно один истинный и одна ложь.
^ Означает исключающего ИЛИ.
Так что теперь это не так -
Если X и Y равны 1, то теперь ложным.
То есть разница между ^ и |, является то, что OR, вы можете иметь, если х
правда или у верна, то мы хороши.
Нет, говорит, что если ^ х, правда, у должно быть ложным, или же это не так.
У вас есть вопрос?
>> SPEAKER 26: [неразборчиво]
ALI: Да.
Это отчасти похоже.
ROB: Да, поэтому, когда вы доберетесь до этой низкоуровневого вещи, эти
виды операций вы имеете дело с.
На аппаратном уровне, вы будете иметь дело только с битами.
Вы не иметь дело с числами.
ALI: Хорошо, для ^, или, если у вас есть 1 = 0, то, что должно оценить, что для?
КЛАСС: 1.
ALI: Круто.
Если у вас есть
0 ^ 1? КЛАСС: 1.
ALI: Круто.
0 ^ 0?
Cool.
И тогда 1 ^ 1?
КЛАСС: 0.
ALI: Cool, удивительный.
Следующий -
Роб: Я думаю, что это все, что мы имеем дело с.
Мы будем делать только это.
ALI: единственный раз, когда мы должны делать -
ROB: О, это будет в последний проблемы.
SPEAKER 27: Подождите, еще раз?
ALI: Извините, каков был ваш вопрос?
>> SPEAKER 27: Можете ли вы объяснить, что опять?
^?
SPEAKER 27: Exclus - да.
ALI: Так что исключающего ИЛИ означает, что там должен быть исключительно
одно истинное и одно ложное, так что 1 и один 0, по сравнению с OR, вы можете иметь -
одна из них, чтобы быть правдой, или оба из них может быть правдой, потому что
Для оценки к истине.
SPEAKER 27: Таким образом, 0 и 0 было бы ложным.
ALI: Да.
Но если у вас 1 |
1, будет равно правда.
Но если у вас есть 1 ^ 1, как мы сделали, что ЛОЖЬ.
Потому что это не только одна правда.
ROB: И это может или не может быть полезным, но обратите внимание, что это ^
равно просто принимать |
И минус.
И вы можете думать об этом таким образом.
^ Только ORing все вместе, но, принимая любой из битов, где
как было верно.
Так и возвращает все, где оба были правдой.
| Возвращает все, где один или оба были правдой.
Так вычитания из | дает вам ^.
ALI: Есть вопросы?
Это было много информации.
Все хорошо?
>> ROB: Мы можем пойти по следующему те, для следующей задачи, сократить
в какое время это?
Они не нуждаются в этом до следующей проблемой.
Али: Я думал, что это.
ROB: Это не так.
Али: Вы уверены?
ROB: Да, я уверен.
Али: Почему бы нам не начать делать следующий проблема?
Проблема, опять же, изменить его из нижнего регистра в верхний регистр, и это
время, чтобы использовать битовые операторы.
ROB: Итак, мы -
Давайте начнем с двоичным представлением 'A', капитал 'A',
которых составляет 65 лет.
Таким образом, в двоичном -
так 'A' = 65, который =, в двоичном -
Я собираюсь испортить число 0s - то.
ALI: Значит ли это смысл для всех?
Так, 1, нет 2s, не 4s, не 8s, нет -
не 16, не 32s, а затем один 64.
ROB: Да, я думаю, что это слишком много 0s.
ALI: Извините.
>> ROB: Итак, у нас есть 64-множество, и у нас есть 1 комплект, и объединение этих
вместе, получаем 65.
ALI: Cool фасоль?
ROB: Так что теперь, нижний регистр 'A' -
заметил 97 -
В чем разница между 97 и 65?
SPEAKER 28: 32.
ROB: Да.
Так что это 32, которая является его собственным немного, так что это будет 110001.
И это будет справедливо для всех возможных символов.
Таким образом, если мы думаем о 'D', который будет 68, что это будет 1000011.
А потом строчные 'D' будет 68 плюс 32, что составляет 100, которое является
будет то же самое, что это было, просто щелкая
32 раз, поэтому 1100011.
Таким образом, разница между прописными и строчными буквами просто листать
что 32-битные положение.
SPEAKER 29: Разве это не 1000100?
ROB: Подождите, это 100 -
то, что я сделал не так.
Это было не так.
Я думал, что это была разница в 3, так что потом я просто застрял
двоичный 3 в конце.
Это должно быть в порядке.
ALI: Спасибо.
Описание указание на это.
Это был острый.
Все права, ясно людям?
>> ROB: разница между прописными и строчными версия
всегда просто будет 32, и поэтому он всегда будет один бит
, которая должна быть перевернута для переключения между ними.
ALI: Так что в этом случае, зная разницы между столицей и
строчная это хорошо.
Не в коде, но концептуально по крайней мере, это хорошо.
Таким образом, вы, ребята, можете идти вперед и кода, который в пространствах сейчас.
Или мы должны просто обсудить это?
ROB: Мы можем просто обсудить это.
Я не знаю.
Вы, ребята, можете попробовать.
Обсуждение среди себе на некоторое время.
Мы дадим вам возможность кодирования.
[Промежуточные VOICES]
ALI: - прохладно
SPEAKER 30: Это как хакер комедии.
Али: Да, мы просто говорю новости, пройдя через это.
>> Роб: И мы вернулись.
ALI: Это странно.
Я чувствую, что мы должны иметь CS50 станции новость, и мы могли
на самом деле сидят, как это.
ROB: Hacker News.
ALI: Hacker News 50.
ALI: Не стесняйтесь задавать любые вопросы, если вы смущены.
ROB: Кто-нибудь застряли?
Али: Да, это хорошая вещь.
ALI: Подождите, вы застряли в вашем кресле?
Ох.
Я был немного заинтересован.
ROB: Потому что я просто понял, что мы собираемся хотите
другой оператор побитового.
А сейчас давайте просто конвертировать прописных и строчных букв.
ALI: К сожалению, не все получают, что объявление?
Мы собираемся, чтобы перейти от прописных и строчных букв.
ROB: Тогда мы будем обсуждать нижнего регистра в верхний сразу после этого.
О, нет.
У нас есть ошибка в этом, который, я думаю, мы никогда не пытался бежать.
Какие это всего лишь символ с должна быть объявлена ​​вне цикла, потому что
сфера его применения ограничена в петлю.
SPEAKER 32: В данном случае, это неправильно использовать номер?
ROB: Эх, вам не нужно.
Если я гарантирован, что капитал 'A' - или, нижний регистр "а" минус капитал 'A'
был ровно один бит, но вы не знаете, что это 32 -
все будет работать так же хорошо, если бы 16-битной, которое было перевернуто - или
Нет, я думаю, это wouldn't -
или 64 бит были перевернуты, возможно.
Но вы не должны использовать 32.
Вы могли бы вместо этого использовать нижний регистр 'A' '' минус капитала.
>> SPEAKER 32: Хорошо.
Что вы можете сделать, если вы чувствуете, как вы пишете слишком много, что вы можете определить его
в верхней части.
Таким образом, вы можете быть, как, разница INT = нижний регистр 'A' '' минус капитала. И
Затем вы можете ввести разницу вместо этого.
Вот в силе.
Но только с помощью номер 32 это своего рода -
SPEAKER 33: Даже если это из-за того, что это 32-разрядная?
ALI: Да.
ROB: Там может быть -
Единственной гарантией нам нужно сделать вам, что разница между
строчные и прописные является один бит.
Это не должно иметь значения, что происходит с 32-битной который перевернулся.
За время соображений, мы начнем собирается по этому поводу.
Ничего страшного, если вы еще не закончили.
Не беспокойтесь об этом.
ROB: предполагается, что с собой буквы -
Мы не должны считать это с большой буквы.
Мы знаем, что с является заглавная буква, после этого время цикла -
Сделай цикла.
Таким образом, это означает, что выглядит примерно так 'A'. Поэтому если мы хотим довести это
'А' до этого 'а', что нам нужно делать?
Так как же нам преобразовать и перевернуть немного?
ALI: Как мы переверните его?
>> ROB: Итак, мы знаем, что мы хотим, чтобы перевернуть 32 бит.
Так что будем делать "а" минус "А", или мы могли бы написать 32, но -
палки, это наоборот.
ALI: Хорошо, так вот это Роб расчета этого числа, магическое число 32.
Таким образом, он выяснить, где что немного флип области будет.
А то, что мы ставим вопрос, где знаки?
ROB: Как мы перевернем этот бит?
С точки зрения прописной буквы, это 0, и мы хотим стать 1.
SPEAKER 34: |.
ROB: Да.
Так что это нам говорит, что мы взять 'A'. Мы ORing его с 0 -
1000 -
и что = то.
ALI: Имеет ли это смысл для всех?
Мы можем пройти через это по крупицам, если хотите.
SPEAKER 35: Вы [неразборчиво]?
ALI: Где знаком минус?
ROB: О, вы имеете в виду здесь?
ALI: О, да.
ROB: Я думаю, это нам.
Мы могли бы сказать 32, и теперь мы просто с помощью побитового оператора.
Али: Нам не нравится магия чисел.
Мы не собираемся этого делать.
Кроме того, я думаю, что мы должны просто использовать оператор побитового -
SPEAKER 36: Если вы используете ^, вы будете получать 32?
SPEAKER 37: Да, я думаю -
ROB: Да, вы будете.
Али: Это, как вы сделали бы это для выезда
от столицы в нижний регистр.
>> Теперь любой может сказать мне, почему Роб и я изменил строку, и как мы пошли
из прописных строчными, а строчные в
верхний регистр, как мы делали раньше?
Кто-нибудь есть какие-либо идеи, почему это может быть сложнее?
ROB: Так что мы сделаем -
ALI: Да, идти вперед.
SPEAKER 38: | Оператор было только действительно хороший для добавления.
ALI: Да, именно так.
ROB: Итак, что мы хотим сделать в нижнего регистра в верхний случае,
преобразовать это 'а' -
таким образом, мы хотим положить в некоторых номерах здесь и использовать некоторые оператора так, чтобы он
из к капиталу А. Мы все еще, вероятно, с использованием 32 так или иначе, но теперь, как мы делаем
получить это, чтобы выйти на это?
Таким образом, с -
ой, я все еще хочу, что слишком -
ALI: Так что теперь, если мы преобразования из нижнего регистра в верхний снова, то мы
сделать ^ операцию, как вы, ребята сказали.
ROB: Есть и другие способы вы можете делать вещи.
Многие операторы побитового в конечном итоге очень легко определяемые в терминах
другие операторы побитового.
Так что я собираюсь, чтобы не использовать ^ или на всех, но ^ работал прекрасно.
>> ALI: Хорошо, мы собираемся пойти на последней проблемы, которая является основным -
Последняя проблема заключается в преобразовании что-то в двоичный.
Так, например, у вас есть 50, а затем преобразовать его в
двоичный, который является 110010.
И я думаю, что вы, ребята, все знают о бинарных от лекции.
И вы также не должны ставить любой ведущей 0s в ней.
ROB: Вы можете игнорировать эту часть на данный момент.
На первом этапе, вы можете сделать это так, чтобы было ведущим 0s.
И тогда мы можем изменить, что не имеют ведущих 0s, если у нас есть время.
ALI: Так что не беспокойтесь об этом.
Попробуйте получить в двоичной системе.
Хорошее место для начала было бы -
ROB: Мы должны попросить целое.
ALI: О да, это хорошо.
Мы можем начать с этого.
Таким образом, вы можете изменить строку.
Таким образом, вместо характер, теперь мы имеем дело с целыми числами.
Круто?
>> ROB: И что теперь наша сделай то время как условие будет?
Он просит неотрицательное целое число.
Али: Когда мы хотим сохранить с помощью которого пользователь что-то другое?
Когда это меньше, чем 0.
ALI: Верно.
ROB: В то время я меньше 0.
Али: Теперь мы хотим, чтобы преобразовать его.
Вы, ребята, есть какие-либо идеи, что делать?
Любые намеки?
Да.
SPEAKER 39: Есть ли у нас, чтобы преобразовать его, или мы можем просто напечатать некоторые 0 и 1
, который был бы правильный номер?
Не могли бы вы сделать для петли и отсчитывать по степеням 2?
ROB: Да.
Вам не нужно конвертировать я в двоичное -
двоичного представления я не помещается внутри я.
Вам просто нужно распечатать двоичного представления я.
ALI: Другими словами, вы не должны идти по степеням двойки.
ROB: Потому что я уже хранятся в виде бинарных файлов, поэтому вам не нужно
преобразовать его в двоичный формат.
Просто зайдите на его двоичный, и распечатать его.
И вы будете нуждаться, чтобы использовать Побитовая, потому что вы хотите посмотреть на
фактические биты.
Вам не нужно использовать Побитовая, но, пожалуйста.
И это на самом деле -
Вы просто можете сделать степеням двойки, умножив на 2.
Мы пойдем по одному из двух последних бинарные операторы побитового
которые этим.
Поэтому, когда вы берете -
>> ALI: Можете ли вы пройти через них обоих?
ROB: Да.
Итак, давайте с 9.
Таким образом, 9 сдвиг влево 1 -
что сдвиг влево средства просто переместить все биты влево и вставить 0.
Таким образом, мы движемся все биты от 9 до левого
положение, которое дает нам -
Так, заметьте, мы перешли все оставили одного, и вставил 0 на
правая сторона.
Если бы мы сдвигается влево на два, мы хотели бы переложить все оставили по два,
и вставьте две 0s, чтобы заполнить пробелы.
Вопрос?
ALI: Итак сдвиг вправо делает подобную вещь.
Если у вас есть 9 Сдвиг вправо 1, то вы просто движущиеся все на
Право, вы теряете цифры, таким образом, 100 вместо.
ROB: Таким образом, вы это прекрасно, что вы теряете немного, что случилось, все
до упора вправо.
Существуют различные типы правых сдвигов, но в принципе вы можете думать
Сдвиг вправо, как только делением на 2.
И вы можете думать о сдвигом влево, как умножить на 2.
Так что если вы превратили этот -
Если перевести 9 сдвига 1, которая равна 10010, если вы на самом деле произошло
через двоичные и понял, что это было, было бы просто 18.
Мы просто умножить на 2.
1001 левый Shift 2 будет 36.
Мы умножить на 4.
Хорошо, прохладно, так что это удобно оператору побитового для этого.
Более путаницы?
Вы, ребята, хотите попробовать?
Или мы можем просто перейти в правом и запустить его?
ROB: Мы, вероятно, следует перейти прямо дюйма
ALI: Да, ладно.
Роб: И пройти через это вместе.
>> ALI: Ну, я просто пойду в нее.
Так что, как он сказал в начале, что мы собираемся просто пройти по крупицам.
Так что мы собираемся нуждаться в петлю.
Кто-нибудь есть идея лучший вид цикла, чтобы пройти через это?
У нас в то время как петли, сделай то время как петли, для петель.
SPEAKER 40: Do-время цикла?
ROB: Итак, помните, что я говорил о том, мы используем только делать-а
петлями, чтобы получить пользовательский ввод.
Вы никогда не будете в значительной степени когда-либо использовать их для чего-либо еще.
ALI: Проблема с делать-а петель он делает что-то, прежде чем она проверяет
состоянии.
Таким образом, он может сделать что-то плохое -
нравится, больно -
сделать то, что это не возможно.
Итак, вы хотите проверить в первую очередь.
ROB: Там очень много случаев, когда вы можете использовать сделай то время как петли, но люди
не ожидаю, что вы использовать их, если это пользовательский ввод.
Таким образом, мы использовали наш сделай то время как цикл, чтобы получить я.
Сколько раз наш цикл захочет цикла?
Мы хотим, чтобы цикл по каждому из битов я.
Сколько битов в I?
SPEAKER 41: 32.
ALI: Да.
ROB: Итак, есть 32 бит.
Мы не хотим сказать, 32.
Вместо этого мы хотим сказать SizeOf -
которые, вы видели, что в классе еще?
ALI: Нет.
ROB: Почему говорят, что использовать -
SizeOf (INT) раз 8 -
ALI: Итак, SizeOf есть -
>> SPEAKER 42: [неразборчиво]
ALI: Интересно.
Таким образом, SizeOf является встроенный в C функции, где она просто говорит вам,
число битов в -
ROB: Bytes.
ALI: Bytes, извините -
число байт, переменная для хранения значения.
Так что я думаю, что он перешел в класс, то Int составляет 4 байта может быть.
Круто?
ROB: Но вы не должны знать, что Int составляет 4 байта.
Вы должны быть в состоянии сказать -
Вы должны использовать SizeOf (INT), чтобы получить 4 байт.
И это на самом деле важно для некоторых вещей.
Int может быть не 4 байт.
На другом компьютере Int может быть 8 байт.
Так что ваша программа не будет работать на компьютере, потому что вы жестко 32
Биты, когда на этом компьютере происходит с 64 бит.
ALI: Итак, у вас есть общее число битов, которые вы хотите, чтобы развернуться.
Роб: А разница между байт и бит, что
8 бит в байте.
Таким образом, SizeOf (INT) возвращает 4 байта, то мы должны умножить это
на 8, чтобы получить 32 бит.
>> ALI: Итак, мы знаем, что максимальные и мы знаем, что мы хотим, чтобы перейти от -
Мы хотим, чтобы пройти через все из них.
Поэтому мы хотим, чтобы перейти от 0 до numBits.
Так кто-нибудь знает, как написать цикл для этого?
Любой?
SPEAKER 43: [неразборчиво]
ALI: Итак, вы хотите, чтобы пересечь номер я с нулевого бита
Первый бит, второй бит, третий бит, все пути к numBits.
Максимальное количество битов, которые вы можете получить.
ROB: Что общего цикла мы используем то, что мы хотим сделать что-то х раз?
ALI: Для.
Perfect.
Таким образом, у нас есть для.
И тогда мы создадим итератор, который не собирается быть я.
ROB: J.
ALI: J = 0.
Поэтому мы начнем с 0.
И тогда мы будем иметь условие, чтобы убедиться, пока вы
происходит через него каждый раз -
[Промежуточные VOICES]
ROB: J.
ALI: J меньше, чем numBits.
Таким образом, мы не хотим, чтобы сделать фактически равен единице, потому что они numBits
общая, и мы начинаем с 0.
Таким образом, мы фактически будем иметь -
SPEAKER 44: Oh.
ALI: индексы не закончится в numBits минус 1.
ROB: Занумеруем биты от 0 до 31, мы не маркировать их от 1 до 32.
ALI: А потом мы собираемся увеличивать каждый раз на один, потому что мы хотим
проверить все до единого.
Таким образом, мы пойдем J + +.
>> SPEAKER 45: Почему вы это делаете?
SPEAKER 46: Зачем вы едете через каждый бит?
ROB: Поэтому мы хотим, чтобы пройти через каждый бит и -
Так скажем, у нас есть некоторое число.
ALI: 68.
ROB: Мы можем использовать 68.
Таким образом, двоичный это будет 100100.
Так что это внутри меня, и мы хотим перейти на каждом из этих битов.
Это 1?
Распечатать 1.
Разве 0?
Распечатать 0.
Тогда мы идем к следующему немного.
Это 1?
Распечатать 1.
Является 0?
Распечатать 0.
ALI: Cool, хорошо.
Сейчас мы находимся на правильном индекс, где это бит.
Как мы можем убедиться, что конкретный один?
Скажем, мы находимся в = 0, поэтому мы хотим, чтобы проверить индексом 0 в бит.
Таким образом, в данном случае, это одно.
>> Так что теперь как же нам идти о проверке, - о, это было бы этого.
ROB: Да.
ALI: Извините.
Как бы мы идти о проверке, что одна, в смысле?
Как бы мы проверяем, если это 0 или 1?
Ну let's -
Класс: А 1?
ALI: И?
Да.
ROB: Так скажем, у нас уже есть 1.
Тогда это и это вернет ли это 1 или 0.
ALI: Итак, мы можем пойти вниз.
И мы можем сделать, как вы, ребята сказали, ведения и функции.
ROB: INT -
Как же я хочу сказать, что это -
Isone = я.
И в первый немного, мы, случается, смотрю, мы делаем я и 1.
Теперь то, что мы собираемся хотят и на второй бит?
SPEAKER 47: 2.
ROB: Да, второе, что мы находимся на 2.
ALI: Вы заметите, что 1 переехала к левой.
Так мы узнали любые битовые операторы, чтобы сделать эту функцию?
ROB: следующий -
ALI: Да, верно, именно так.
Так что это сдвиг влево.
Вместо того, чтобы всегда проверять с 1, мы собираемся перевести его.
И сколько раз мы собираемся перевести его?
Если мы проверяем одного нулевого затем мы собираемся, чтобы переместить его на нуле.
Да, именно так.
Таким образом, вы оставили переложить ее на J.
Perfect.
Итак, теперь мы знаем -
у нас есть эта Int от того, если это 1, а затем -
так Роба вид обмана здесь -
И вот теперь он шел впереди и он просто сказал, что если это на самом деле 1,
потому что 1 истинен, так что мы не должны говорить ISF Isone равен 1 -
так что если Isone, то мы печатаем 1, в противном случае мы печатаем 0.
>> ROB: Таким образом, наша программа имеет общую ошибку.
Ну, вопросов по этой первым.
SPEAKER 48: Можете ли Вы когда-либо Isone в четыре операции части и
пор это переложить себя как последняя часть?
Так Isone равна 1, а затем -
ROB: Да, можно.
Мы можем показать, что на самом деле, как только мы исправить ошибку, что я собираюсь
обсудить с Вами все.
Обратите внимание на порядок мы будем над вещами.
Учитывая это бинарное представление, мы, начиная с нулевого бита.
Если это 0, то мы печатаем -
Ну, это 0, поэтому мы печатаем 0.
Тогда мы идем к второй бит.
Это 0, поэтому мы печатаем 0.
Тогда мы идем к третьему немного.
Это 1, поэтому мы печатаем 1.
ALI: Так это происходит в обратном направлении.
Так как же вы, ребята, предлагаю исправить это и пойти другим путем?
SPEAKER 49: [неразборчиво]
ROB: Да.
Таким образом, вместо того, чтобы идти от 0 до numBits, мы пойдем от numBits бит в 0.
ALI: Итак, [неразборчиво]
всегда можно пойти другим путем.
ROB: NumBits минус 1, потому что это последний nubmer -
ALI: Потому что это идет от 0 до 31.
И тогда мы всегда убедитесь, что оно больше 0, поэтому вы не идете
слишком далеко вправо.
И тогда вы всегда будете вычитать от 1 до идем направо.
>> ROB: Итак, теперь у нас есть обратная петля, и это число обратно в печати
В правильном пути.
SPEAKER 50: Вам не придется менять сдвиг вещи тоже?
ALI: Итак, нет.
ROB: Мы делаем точно такой же операции, только теперь
в обратном порядке.
Таким образом, вместо того, чтобы делать сдвиг на numBits минус 1, чтобы получить все это
бит, а не делать, что в прошлом, мы просто делаем это в первую очередь.
По изменение этой сюда, мы обратном порядке все
что происходит внутри.
Но мы не хотим, чтобы изменить то, что происходит внутри вообще.
ALI: Есть ли в этом смысл?
Обработка?
Итак, кто-нибудь еще есть какие-то другие концептуальные вопросы?
ALI: Прежде чем мы углубимся в его точка которой -
ALI: Ладно, хорошо идти.
Роб: Вместо J, чтобы быть нашим -
вместо J, чтобы всегда перемещаться по, как один левый J смену, я думаю, что
Вы говорите, как, к J использовать себя.
Таким образом, для J -
Я думаю, это тяжело - = 1 << 31.
Это то, что я хочу?
Я думаю, что это << 31.
J> = 1.
J >>, >> Isone, я и J -
так что теперь вместо использования -
ALI: Вы постоянно движется J вместо того,
индекс, чтобы проверить его.
Это не так уж плохо.
Мы используем подобного рода логика.
Так что если вы вернетесь -
Да, но это будет его потерять.
Хорошо, вы только собираетесь набрать его снова.
Если вы заметили, что у нас есть 1 << J количество раз, и мы были
увеличивая J каждый раз на один шаг, но на этот раз вместо
они делают приращение J в верхнем внутри цикла.
Поэтому вместо того, всегда в движении его вниз -
ROB: Самая первая итерация цикла, у нас есть J 10000.
Следующей итерации цикла составляет 01000.
Следующая итерация в том, что.
И 1 просто будет держать распространяющиеся вниз, пока мы попали в очень
конца, где сейчас именно это.
Следующий, 1, будет оттолкнулся, и J больше не является больше
меньше или равна 1.
Я мог бы также положить больше 0, то же самое значение.
А потом это все.
Вопросы?
Да.
>> SPEAKER 51: [неразборчиво]
ROB: Так вот же, как -
Вы видели J + = 3?
Так это же, как и J = J + 3?
Вы можете сделать это практически для любого оператора в C. Так J >> = 3
равно J = J >> 3.
Так что работает также с операторами Побитовая.
И я не должна была поставить 31 здесь.
Я должен был положить numBits - 1.
ALI: Yay, никакой магии чисел.
Ладно, это 4:00, так что если вы, ребята, должны пойти - но есть ли в этом смысл?
Как вы, ребята, есть другие вопросы?
ROB: Я тоже собираюсь бросить в том, что если бы мы хотели -
был он обсуждал тройной оператор на всех?
ALI: Нет
Это нормально.
ROB: Так что вы можете смотреть на это в следующий раз.
ALI: Ладно, на самом деле?
Теперь вы просто показухи.
ROB: Нет, сейчас it's -
это то, что заставляет людей заинтересованных, и теперь они пойдут смотреть в него.
Так вот, что делает то же самое, за один шаг.
Итак, сначала проверьте, есть я и J 1?
Это правда?
Если это так, печать 1, другой, распечатать 0.
Али: Но делать это по-другому это прекрасно, как хорошо.
Он имеет такую ​​же логику.
Так что это не как одна -
ROB: На данный момент, мы можем избавиться от этих фигурные скобки, потому что это только
одна строка цикла.
ALI: Хорошо, так ли это смысл?
Это был вид прыжка.
Но это было только отчасти синтаксис, тем более.
>> Круто?
Любые другие вопросы?
ROB: Все в порядке.
ALI: Хорошо, прохладно.
Спасибо, что пришли к секции.