Форум программистов, компьютерный форум CyberForum.ru

Подскажите, пожалуйста, что значат знаки - C++

Восстановить пароль Регистрация
 
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
09.04.2011, 02:08     Подскажите, пожалуйста, что значат знаки #1
Подскажите, пожалуйста, что значат знаки R[i >> 1], (i & 1) ? 0xF0 : 0x0F, x << ((i & 1) ? 4 : 0)

C++
1
2
3
4
5
6
7
8
    for (int i = 0; i < 8; i++) 
    {                  // Заменяем 4х-битные кусочки согласно S-блокам
    int x = R[i >> 1] & ((i & 1) ? 0xF0 : 0x0F);   // x - 4х-битный кусочек
    R[i >> 1] ^= x;                                // Обнуляем соответствующие биты
    x >>= (i & 1) ? 4 : 0;                         // сдвигаем x либо на 0, либо на 4 бита влево
    x = s_blok[i][x];                                   // Заменяем согласно S-блоку 
    R[i >> 1] |= x << ((i & 1) ? 4 : 0);           //
  }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fafle
 Аватар для Fafle
34 / 34 / 4
Регистрация: 19.03.2010
Сообщений: 136
09.04.2011, 02:22     Подскажите, пожалуйста, что значат знаки #2
C++
1
R[i >> 1]
Это тебе по поразрядные операции почитать над.
А
C++
1
 (i & 1) ? 0xF0 : 0x0F
Это конструкция оператора if

Про иф рассказать могу, а вот про операции сам только читать начал
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.04.2011, 02:24     Подскажите, пожалуйста, что значат знаки #3
<<, >> - побитовый сдвиг на некоторое количество разрядов (например, 10011100 >> 3 == 00010011). Вообще, сдвинуть число на один бит вправо - значит разделить его нацело на 2, сдвинуть на один бит влево, соответственно, умножить на два. Так что i >> 1 и i / 2 эквивалентно.
i & 1 - проверка на чётность. Если у целого числа в младшем разряде стоит 1 - значит число нечётное (поскольку если у числа стоит справа 1 в двоичном представлении, это значит, что при переводе из двоичного представления в десятичное мы в любом случае прибавим к числу единицу, а поскольку до прибавления этой единицы число гарантированно будет чётным (все слагаемые ранее были степенями двоек), то после прибавления этой единицы получим гарантированно нечётное число).
exp1 ? exp2 : exp3 - тернарный оператор. Означает следующее: если exp1 истинно, то результатом операции будет exp2, в ином случае exp3.

Не по теме:

Блин, вроде элементарные вещи, а какие дебри за собой тащат.
Так что если до сих пор не очень понятно, советую погуглить про системы счисления (двоичную, в частности), про перевод из одних сс в другие и т.д.

Return
 Аватар для Return
2 / 2 / 0
Регистрация: 12.04.2009
Сообщений: 11
09.04.2011, 02:26     Подскажите, пожалуйста, что значат знаки #4
Это Тернарный оператор.

Для начала рассмотрим его синтаксис:

УТВЕРЖДЕНИЕ ИЛИ ВЫРАЖЕНИЕ?ДЕЙСТВИЕ1:ДЕЙСТВИЕ2;


Принцип действия прост - если УТВЕРЖДЕНИЕ ИЛИ ВЫРАЖЕНИЕ - истина, выполняется ДЕЙСТВИЕ1, если - ложь, выполняется ДЕЙСТВИЕ2.
Пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# include <iostream>
using namespace std;
void main(){
    int A,B; //объявляем две переменные
 
    //просим пользователя ввести в них данные
    cout<<"Enter first digit:\n";
    cin>>A;
    cout<<"Enter second digit:\n";
    cin>>B;
 
    /*Если, (b>a), то на место оператора ?: подставится b,
    в противном случае на место оператора подставится a,
    таким образом, то число, которое больше запишется
    в переменную max.*/
    int max=(b>a)?b:a;
 
    /*Если, (b<a), то на место оператора ?: подставится b,
    в противном случае на место оператора подставится a,
    таким образом, то число, которое больше запишется
    в переменную min.*/
    int min=(b<a)?b:a;
 
    // Вывод результата на экран.
    cout<<"\n Maximum is \n"<<max;
    cout<<"\n Minimum is \n"<<min<<"\n";
}
Yandex
Объявления
09.04.2011, 02:26     Подскажите, пожалуйста, что значат знаки
Ответ Создать тему
Опции темы

Текущее время: 03:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru