Язык программирования Си для персонального компьютера - [38]
Адресная арифметика
Аддитивные операции, выполняемые над указателем и целым, имеют осмысленный результат в том случае, если указатель адресует массив памяти, а целое значение представляет смещение в пределах этого массива. Преобразование целого значения к адресному смещению предполагает, что в пределах смещения вплотную расположены элементы одинакового размера. Это предположение справедливо именно для элементов массива, поскольку массив определяется как последовательность значений одинакового типа, расположенных в смежных ячейках памяти. Способ хранения других типов данных не гарантирует сплошного заполнения памяти, т.е. даже между ячейками памяти, содержащими элементы одного и того же типа данных, возможны участки неиспользованной памяти. Поэтому корректность сложения и вычитания адресов, ссылающихся на какие-либо другие объекты, не гарантируется.
На компьютерах с сегментной архитектурой памяти (в частности, с микропроцессором типа 8086/8088) аддитивные операции над адресным и целым значениями могут не всегда выполняться правильно. Это вызвано тем, что указатели, используемые в программе, могут иметь различные размеры в зависимости от используемой модели памяти. Например, при компиляции программы в некоторой стандартной модели памяти адресные модификаторы (near, huge, far) могут специфицировать для какого-либо указателя другой размер, чем определяемый по умолчанию выбранной моделью памяти. Более подробная информация о работе с указателями в различных моделях памяти приведена в разделе 8 "Модели памяти".
Примеры:
int i = 4, j;
float x[10];
float *px;
px = &x[4] + 1; /* пример 1 */
j = &x[i] — &x[i-2]; /* пример 2*/
В первом примере целочисленный операнд i складывается с адресом пятого (по порядку следования) элемента массива х. Значение i умножается на длину типа float и складывается с адресом x[4]. Значение результирующего указателя представляет собой адрес девятого элемента массива.
Во втором примере адрес третьего элемента массива х (заданный как &х[i-2]) вычитается из адреса пятого элемента (заданного как &x[i]). Полученная разность делится на размер типа float. В результате получается целое значение 2.
Операции сдвига
Операции сдвига сдвигают свой первый операнд влево (<<) или вправо (>>) на число разрядов машинного слова, специфицированное вторым операндом. Оба операнда должны быть целыми значениями. Выполняются преобразования по умолчанию, причем в СП MSC над обоими операндами совместно, а в СП ТС независимо над каждым операндом. Например, если переменная b имеет тип int, а переменная и тип unsigned long, то перед выполнением операции b< в СП MSC переменная b будет преобразована к типу unsigned long.
Тип результата в СП ТС — это тип левого операнда после преобразования, а в СП MSC — единый тип преобразованных операндов. В некоторых ситуациях результат в СП ТС и в СП MSC может оказаться различным.
При сдвиге влево правые освобождающиеся биты заполняются нулями. При сдвиге вправо метод заполнения освобождающихся левых битов зависит от того, какой тип результата получен после преобразования первого операнда. Если тип unsigned, то свободные левые биты заполняются нулями. В противном случае они заполняются копией знакового бита.
Если второй операнд отрицателен, то результат операции сдвига не определен.
При выполнении операций сдвига ситуация потери значимости не контролируется. Если результат сдвига не может быть представлен типом первого операнда после преобразования, то информация теряется.
Пример:
unsigned int х, у, z;
х = 0х00АА;
у = 0х5500;
z= (х<<8) + (у>>8);
В примере х сдвигается влево на 8 позиций, а у сдвигается вправо на 8 позиций. Результаты сдвигов складываются, давая значение ОхАА5а, которое присваивается z.
Операции отношения
Операции отношения сравнивают первый операнд со вторым и вырабатывают значение 1 (ИСТИНА) или 0 (ЛОЖЬ). Результат имеет тип int. Имеются следующие операции отношения:
Операция | Проверяемое отношение |
< | Первый операнд меньше, чем второй операнд |
> | Первый операнд больше, чем второй операнд |
<= | Первый операнд меньше или равен второму операнду |
>= | Первый операнд больше или равен второму операнду |
== | Первый операнд равен второму операнду |
!= | Первый операнд не равен второму операнду |
Операнды могут иметь целый, плавающий тип, либо быть указателями. Типы первого и второго операндов могут различаться. Над операндами выполняются преобразования по умолчанию.
Операндами любой операции отношения могут быть два указателя на один и тот же тип. Для операции проверки на равенство или неравенство результат сравнения означает, указывают ли оба указателя на одну и ту же ячейку памяти или нет. Результат сравнения указателей для других операций ( <, >, <=, >=) отражает относительное положение двух адресов памяти.
Сравнение между собой адресов двух несвязанных объектов, вообще говоря, не имеет смысла. Однако сравнение адресов различных элементов одного и того же массива может быть полезным, поскольку элементы массива хранятся в памяти последовательно. Адрес предшествующего элемента массива всегда меньше, чем адрес последующего элемента.
В условиях применения современных видов оружия, и прежде всего ядерного оружия, являющегося самым мощным средством поражения противника, от каждого солдата и матроса больше чем когда-либо требуются отличная выучка, стойкость, железная воинская дисциплина и непреклонная воля к победе над врагом. Какие бы трудности ни возникали в бою в связи с применением новых видов оружия, помни о своем священном долге перед Родиной и отдавай все силы успешному выполнению боевой задачи. Чтобы стать всесторонне подготовленным воином Советских Вооруженных Сил, ты обучаешься многому, что нужно знать и уметь делать в бою. Данное Пособие поможет тебе ознакомиться с ядерным, химическим и бактериологическим оружием, Научиться умело вести боевые действия в условиях его применения и овладеть средствами и способами защиты от его воздействия.
Почему возникают заболевания щитовидной железы? Как вовремя определить начало болезни? Каким образом добиться окончательного выздоровления? Книга даст ответы на эти и многие другие вопросы. Она поможет разобраться в устройстве эндокринной системы и подскажет, как не пропустить тревожные симптомы и заподозрить у себя болезнь. А если вы уже страдаете заболеваниями щитовидной железы, то в книге вы найдете исчерпывающую информацию о методах диагностики и лечения многих недугов: гипотериоза, тиреодита, диффузного токсического зоба, злокачественной опухоли щитовидной железы и других.
В Справочнике приведены краткие биографии около 1400 российских деятелей украинского происхождения, внёсших свой вклад в развитие России. В нём помещены статьи о государственных, политических, общественных и церковных деятелях, революционерах, декабристах, полководцах, флотоводцах и военачальниках, героях войн, космонавтах, писателях, художниках, скульпторах, архитекторах, артистах театра и кино, режиссёрах, композиторах, искусствоведах, спортсменах, учёных, создателях новых технологий и техники. Справочник через биографии деятелей освещает историю Украины и России за период с 1654 г.
В брошюре даны описания и способы применения пехотных противотанковых средств немецкой армии, захваченных нашими войсками. Брошюра поможет нашим бойцам и командирам научиться применять эти средства против танков противника. Настоящее пособие составлено инженер-полковником Клюевым при участии инженер-полковника Панкратьева.
Руководство предназначается для изучения тактико-технических характеристик, устройства принципа действия, правил применения, хранения и транспортировки противотанковой мины ТМ-72 и минного взрывателя МВН-72.
rufb2edit 0.0.908 сен 2015http://lifehacker.ru/2015/01/22/chitat-v-3-raza-bystree/web2fb2_201509080815_87756238791.0Учимся читать в три раза быстрее за 20 минут - ЛайфхакерИя Зорина 22 января 2015Учимся читать в три раза быстрее за 20 минутУмение быстро читать освобождает кучу свободного времени. Только представьте, вы можете в три раза быстрее справляться со всей литературой — технической, профессиональной или художественной. А теперь приятная новость: в отличие от большинства навыков, которые нужно осваивать постепенно, скорочтение доступно вам уже через 20 минут тренировки.