|
Программирование >> Аргументация конструирования
Для экономии времени C++ вычисляет первым условие]., и в случае, если оно ложно (для оператора &&) или истинно (для оператора I ), выражение условие2 не вычисляется и не анализируется. Типы логических переменных Поскольку > является оператором, то сравнение а > 10 представляет собой выражение. Очевидно, что результатом такого выражения может быть или true (истина), или false (ложь). Вы уже могли заметить, что среди обсуждаемых в главе 2, Премудрости объявления переменных , типов переменных не б]ло логических (булевых) типов. Более того, ни в одном из существующих типов C++ нет значений true или false. Тогда к какому типу отнести выражение а > 10? В C++ для хранения логических значений используется тип int. При этом 0 обозначает false, а любое другое отличное от нуля значение является истиной (true). Выражения типа а > 10 могут принимать значения 0 (false) или, например, 1 (true). Microsoft Visual Basic для интерпретации значений false и true также использует целые числа, но в нем операторы сравнения возвращают или 0 (false), или -1 (true). В новом стандарте ANSI C++ для работы с булевыми переменными определен тип bool, имеющий значения true и false. Бшифнме числа C+ + Переменные хранятся в компьютере в виде так называемых двоичных, или бинарных, чисел, т.е. представлены в виде последовательности битов, каждый из которых может содержать два значения: 0 или 1. Скорее всего, вам не придется оперировать с числами на битовом уровне, хотя существуют ситуации, когда обойтись без этого нельзя. С-I- снабжен несколькими операторами для подобных целей. Вряд ли вам придется часто работать с переменными на битовом уровне, поэтому остальную часть главы следует рассматривать как техническое отступление от основного повествования. Так называемые битовые логические операторы работают с аргументами на битовом уровне. Для того чтобы понять принципы их работы, давайте рассмотрим, как компьютер хранит переменные. Десятичная система счисления Числа, которыми мы чаще всего пользуемся, называются ч ьшы, или числами по основанию 10. В основном программисты на C+ + тоже используют десятичные переменные. Например, мы говорим, что значение переменной var равно 123. Число 123 можно представить в виде При этом каждое из чисел 100, 10, 1 является степенью 10. 123 = 1 * 100 + 2 * 10 + 3 * 1, что эквивалентно следующему: 123 = 1 * + 2 * 10- + 3 * 10° Помните, что любое число в нулевой степени равняется 1. Другие системы счисления Использование числа 10 в качестве основания нашей системы счисления объясняется, по всей вероятности, тем, что издревле для подсчетов человек использовал пальцы рук. Учитывая особеииости нашей физиологии, удобной альтернативной системой счисления можно бьшо бы выбрать двадиатерячную (т.е. с основанием 20). Если бы наша вычислительная система бхла заимствована у собак, то она бы бхла восьмеричной (еше один разряд , находящийся на задней части каждой даны, не учитывается). Эта система счисления работала бы не менее хорошо: 123ic =1 * 8 + 81 + 3 * 8 = 173, Индексы 10 и8 указывают систему счисления: 10 - десятичная. 8 - восьмеричная. Основанием системы счисления может быть любое положительное число. Двоичная система счисления У компьютеров, видимо, пальцев поменьше (может быть, поэтому они такие недалекие?). Они предпочитают пользоваться двоичной системой счисления. Число 123 переводится в двоичную систему таким образом: 1 = 0*128 1*64 + 1*32 - 1-6 + 0*4 + 1*2 + 1*1 = ОШЮНг Существует соглашение, которое гласит, что в записи двоичных чисел используются 4, 8, 16 или 32 (и т.д.) двоичных цифр, даже если старшие цифры - нули. Внутреннее представление числа в компьютере строится именно таким образом. Понятие разряда применяется к числам, кратным десяти, двоичный же разряд называется битом. Восемь битов составляют байт, а слово представляется или двумя, или четырьмя байтами. Поскольку основа двоичной системы счисления очень мала, для представления чисел необходимо использовать слишком большое количество битов. Для представления таких обычных чисел, как ПЗ, неудобно использовать выражения вида 01111011,. Поэтому программисты предпочитают представлять числа блоками из четырех битов. С помощью одного четырехбитового блока можно представить любое число от О до 15, и такая система счисления называется шестнадцатеричной (hexadecimal), т.е. системой по основанию 16. Часто употребляют ее сокращенное название hex. В шестнадцатеричной системе обозначения цифр от 0 до 9 остаются теми же, а числа от 10 до 15 представляются с помощью первых шести букв алфавита: А вместо 10, в вместо 11 и т. д. Следовательно, 123,0- это 7В,. 123 =7 * 161 11)* 16- = 7Bif Поскольку программисты предпочитают представлять числа с помощью 4, 8, 16 или 32 битов, шестнадцатеричные числа состоят соответственно из 1, 2, 4 или 8 шест-надцатеричных разрядов (даже если ведущие разряды равны 0). В заключение замечу, что, так как терминал не поддерживает нижний индекс, записывать шестнадцатеричные символы в виде 7В:€ неудобно. Даже в том текстовом редакторе, который я использую сейчас, довольно неудобно всякий раз менять режимы шрифтов для ввода всего двух символов. Поэтому программисты договорились начинать шестнадцатеричные числа с Ох (это странное обозначение бьшо придумано еще во время разработки языка С). Таким образом, ТВ, равно 0х7в. Следуя этому соглашению, 0х7В равно 123, тогда как 0x123 равно 291. К шестнадцатеричным числам можно применять все те же математические операторы, что и к десятичным. Нам трудно выполнить в уме умножение чисел Схс*СхЕ потому, что таблица умножения, которую мы учили в школе, применима только к десятичной системе счисления. Что и было сделано у некоторых народов, напримерумайя или чукчей. - Прим. ред. 48 Часть \. Первое знакомство с C++ Выражения с римскими числами Интересно, что некоторые системы чисел значительно препятствовали развитию математики, К таким относится и так называемая римская система. Сложить два римских числа не очень сложно: XIX + XXVI = XXV Последовательность выполнения сложения такова: а) ix+vi: I после V уничтожает I перед х, поэтому в результате получаем XV; -=ХХХ, если добавить еще один х, получим хххх, или Х. Сложность вычитания римских чисел приблизительно такая же. Однако, чтобы умножить два римских числа, требуется диплом бакалавра математики (у вас волосы станут дыбом от правила, которое объясняет, как добавить к Х разряд справа так, чтобы X*iv равнялось XL). А уж о делении римских чисел можно писать целые докторские диссертации... Выполнение еых логических оне/игций Все числа C++ могут быть представлены в двоичном виде, т.е. с использованием только 0 и I в записи числа. В табл. 4.2 указаны операции, которые работают с числами побитово; отсюда и происходит название термина битовые операции . Таблицг. Битовые операции ОПЕРАТОР ФУНКЦИЯ Каждй бит меняет свое значение на противоположное: 0 заменяется 1 - нулем & Битовое И: поочередно выполняет операцию И с парами битов левого и правого аргумента I Битовое ИЛИ Битовое исключающее ИЛИ С помощью битовых операций можно сохранять большое количество информации в маленьком участке памяти. В мире существует множество вещей, которые имеют только два состояния (или, максимум, четыре). Вы или женаты (замужем), или нет (хотя можете быть в разводе или еще не женаты). Вы или мужчина, или женщина (по крайней мере, так сказано в моих водительских правах). В C++ каждую такую характеристику вы можете сохранить в одном бите. Таким образом, поскольку для хранения целого числа выделяется 4 байта, в тип int можно упаковать значения 32 разных свойств. Кроме того, битовые операции выполняются крайне быстро. Хранение 32 характеристик в одном типе не приводит ни к каким дополнительным затратам. Битовые операции с одним битом Битовые операторы &, и ~ выполняют логические операции над отдельными битами числа. Если рассматривать 0 как false и 1 как true (так принято, хотя можно ввести и другие обозначения), то для оператора справедливо следующее: -l(true) равно О(false) -О (true) равно 1 (false)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |