Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.86.184] |
|
Страницы: (78) « Первая ... 73 74 [75] 76 77 ... Последняя » ( Перейти к последнему сообщению ) |
Сообщ.
#1111
,
|
|
|
Интересно, по стандарту чему должно быть равно i в этом примере:
int i = 1; i = i++; |
Сообщ.
#1112
,
|
|
|
По стандарту это ill-formed и UB. Ибо двойная модификация одной переменной в рамках одного же выражения.
|
Сообщ.
#1113
,
|
|
|
Цитата prografix @ Интересно, по стандарту чему должно быть равно i в этом примере: https://en.cppreference.com/w/cpp/language/eval_order Добавлено Цитата Flex Ferrum @ По стандарту это ill-formed и UB. Так по старому же вроде стандарту UB, в новом точки следования убрали ведь? Или вернее заменили на что то другое. |
Сообщ.
#1114
,
|
|
|
Почему бы не ввести (нововведение) такую возможность: a.1 - взятие первого бита, и т.д.? Результат - bool. ASM-овские операции bt* есть, так что можно было бы и "p.3 = 1;" писать.
|
Сообщ.
#1115
,
|
|
|
Тогда уж взятие элементов tuple, как в rust.
|
Сообщ.
#1116
,
|
|
|
Цитата Славян @ Потому что большие/маленькие индейцы? Почему бы не ввести (нововведение) такую возможность: a.1 - взятие первого бита, и т.д.? |
Сообщ.
#1117
,
|
|
|
Подобные расширения есть у некоторых компиляторов для микроконтроллеров. Даже тип bit встречал. Но чтобы заСтандартизировать такое... маловостребовано это. Настолько низкий уровень нынче редкость.
|
Сообщ.
#1118
,
|
|
|
Ясно. Спасибо.
Раньше, помнится, встречалось такое: a++; ... a++; |
Сообщ.
#1119
,
|
|
|
Сейчас соревноваться с компиляторами в оптимизации неблагодарное дело. Из мейнстримных, ясное дело, о специализированных разговор особый. К примеру
int x, y, *array, i; /* ... */ x += array[i++]; y += array[i++]; MOV edx, array MOV eax, i ADD x, [edx+eax*4] LEA eax, [eax+2*4] ADD y, [edx+eax*4-4] |
Сообщ.
#1120
,
|
|
|
Цитата Славян @ Почему бы не ввести (нововведение) такую возможность: a.1 - взятие первого бита, и т.д.? А если надо группу бит? Тогда уж лучше класс STL, который будет принимать на вход любой целочисленный тип, и методом at(begin, end) выдавать нужное значение, в том же целочисленном формате |
Сообщ.
#1121
,
|
|
|
Цитата B.V. @ Группа бит (меньшая 8 и большая, чем 1) не является базовой в x86/AMD64-архитектуре. А вот отдельный бит вполне можно считать хранящимся в каком-либо флаге регистра флагов. Так что такой низкоуровневый вариант выглядит вполне логично.А если надо группу бит? Замутки с классами и т.п. - уровень выше, а интересовала именно низкоуровневая возможность. |
Сообщ.
#1122
,
|
|
|
Так-то в Плюсах уже давно есть std::bitset<> и std::vector<bool>. Для эстетов недавно сделали std::span<>; для бит, правда, вряд ли не подойдёт, даже если компилятор поддерживает bit.
Просто обычно незачем. Не, ну если реально нужны контейнер или масштабные битовые операции... так-то проще наоператить прямо по самому int-у старыми добрыми |, & или ^, местами с ~. Честно говоря, никогда не сетовал по поводу отсутствия прямых битовых обращений. |
Сообщ.
#1123
,
|
|
|
Цитата Qraizer @ Да я тоже, конечно; просто думается, что "школьники", увидевшие "a |= 64" будут понимать, что это несколько искусственное число, служащее лишь для установки такого-то бита. Посему, имей мы инструкцию "a.7 = 1", объяснения были бы естественнее. Честно говоря, никогда не сетовал по поводу отсутствия прямых битовых обращений. |
Сообщ.
#1124
,
|
|
|
А почему именно a.7 = 1? Как насчёт
for (int i=0; i<CHAR_BIT; ++i) a.i = b.(CHAR_BIT-1 - i); bit *ptr = &a.3 |
Сообщ.
#1125
,
|
|
|
Цитата Славян @ Таким школьникам бью по рукам линейкой и заставляю сто раз писать на доске a |= 1 << 6. После этого у школьников появляется свободное время, которое они раньше тратили на не всегда правильные вычисления в уме ответа на вопрос "а какой же именно бит мы тут ставим?". просто думается, что "школьники", увидевшие "a |= 64" будут понимать, что это несколько искусственное число |