реклама на сайте
подробности

 
 
13 страниц V  « < 7 8 9 10 11 > »   
Reply to this topicStart new topic
> Детская ошибка
aiwa
сообщение May 12 2016, 16:01
Сообщение #121


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Тоже одни черновики.
С системами контроля версий не знаком, поэтому к всеведающим чисто теоретический ворос имеется:
если из репозитария черновиков стандарта (https://github.com/cplusplus/draft) можно сгенерировать текущий черновик,
то можно ли его откатить к последней версии стандарта?
Go to the top of the page
 
+Quote Post
dxp
сообщение May 13 2016, 05:42
Сообщение #122


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (aiwa @ May 12 2016, 22:01) *
Тоже одни черновики.
С системами контроля версий не знаком, поэтому к всеведающим чисто теоретический ворос имеется:
если из репозитария черновиков стандарта (https://github.com/cplusplus/draft) можно сгенерировать текущий черновик,
то можно ли его откатить к последней версии стандарта?

"Сгенерировать" - неправильный термин, правильнее будет "извлечь из хранилища". Можно извлечь любой комит (фиксацию). Если она не помечена веткой или меткой, то можно посмотреть её "фамилию" - хэш и дать команду

git checkout <hash>

если есть ветка или метка, то

git checkout <branchname>/<tagname>


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 17 2016, 01:28
Сообщение #123


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Шо, привидение увидели?

Цитата(zltigo)
[Pa091]: operator operates on value promoted to int (with possibly unexpected result)
[Pe068]: integer conversion resulted in a change of sign

Не совсем эта, а похожая ругань очень актуальна для умножений по (неудачным) правилам стандарта. Когда расширение должно быть строго с или без знака, как у исходных операндов.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 17 2016, 05:00
Сообщение #124


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (GetSmart @ May 17 2016, 04:28) *
Шо, привидение увидели?

?



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 17 2016, 11:40
Сообщение #125


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ May 17 2016, 09:00) *
?

Сперва они мерились, чей стандарт длиннее.
Потом тишина неприлично затянулась.
Потом кончился попкорн и терпение.

Обсуждение зависло на двух унарных операторах - минусе и тильде.
Цитата
Цитата(aiwa)
А вот унарный оператор ~ стоит особняком: его операнд самодостаточен и совершенно не требует проведения расширения.

Цитата(halfdoom)
Почему? Ведь это оператор дополнения до единицы, который по совместительству можно использовать для побитовой инверсии.

Непонятно, название-то что должно менять? Дополнение до единицы точно так же не арифметическое действие и расширение или заём из старших разрядов не делает.

Моё имхо, с самого начала стандартизации эту пару унарных операторов нужно было выполнять в отложенном режиме. При разборе выражения определив до какого размера придётся "расширяться" операндам. И делать расширение один раз. Но поезд ушёл.

Сообщение отредактировал GetSmart - May 17 2016, 12:04


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 17 2016, 13:47
Сообщение #126


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(GetSmart @ May 17 2016, 14:40) *
Непонятно, название-то что должно менять? Дополнение до единицы точно так же не арифметическое действие и расширение или заём из старших разрядов не делает.


Дополнение до единицы является вполне действием одного класса с вычитанием, сложением или умножением, потому что определяется посредством алгебры многочленов.
Называть эти действия арифметическими или еще как - уже не важно.
В этом и состоит коренное отличие от операций булевой алгебры.
Закон жесток, но это закон.




Цитата(GetSmart @ May 17 2016, 14:40) *
Обсуждение зависло на двух унарных операторах - минусе и тильде.

У унарного минуса нет такого эффекта, как у тильды. Дополнительно-расширенные разряды "минуса" лишь подтверждают результат, у тильды же они его меняют.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 17 2016, 14:35
Сообщение #127


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aiwa @ May 17 2016, 17:47) *
Дополнение до единицы является вполне действием одного класса с вычитанием, сложением или умножением, потому что определяется посредством алгебры многочленов.
Называть эти действия арифметическими или еще как - уже не важно.
В этом и состоит коренное отличие от операций булевой алгебры.
Закон жесток, но это закон.

Закон должен быть корректен. Его терминология должна быть практически реализуемой. И соответствовать реализованным в компиляторах действиям. Чтобы не оказалось, что разработчики компиляторов что-то недопоняли. Или недопонимали ранее.

"По словам Майкрософта" и прочих:
Цитата
Оператор дополнения до единицы (~), иногда называемый оператором поразрядного отрицания, дополняет свой операнд до единицы в каждом разряде.

эти два термина - синонимы. В практической реализации, с ограничением ширины операндов.

Приведите какой-либо пример применения тильды, в котором по стандарту она (оператор) не является поразрядной/побитовой инверсией.

По поводу многочленов тоже не ясно. Тильда в Си применяется к целочисленным операндам и результат тоже целочисленный. Как и все остальные до этого обсуждаемые в этой ветке операторы. Предполагаю, что это противоречит терминологии алгебры многочленов.

Сообщение отредактировал GetSmart - May 17 2016, 17:17


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 17 2016, 16:43
Сообщение #128


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(GetSmart @ May 17 2016, 17:35) *
Закон должен быть корректен. Его термилогия должна быть практически реализуемой. ....

Должен быть, но на практике не всегда. Одни из важнейших терминов стандарта "lvalue" и "rvalue" вообще не имеют строгого определения и понимаются интуитивно.

Цитата(GetSmart @ May 17 2016, 17:35) *
"По словам Майкрософта" и прочих:........
эти два термина - синонимы. В практической реализации, с ограничением ширины операндов.

Приведите какой-либо пример применения тильды, в котором по стандарту она (оператор) не является поразрядной/побитовой инверсией.

Они синонимы в той же степени как "Наrd disk" и "винчестер". Дают одинаковый результат, вот и считаются синонимами.
Порязрадная инверсия помогает быстро вычислить дополнение, но формально это совершенно разные понятия.
Победил комп с двоичной формой представления чисел, в других системах, например из далекого прошлого, говорить
о поразрядных битовых операциях было бы вообще бессмысленно. Хотя операция дополнения вполне имела бы место.

С дополнением искусственный пример придумывать не хочется, сколько себя помню, всегда применял тильду не по стандарту,
а только лишь для поразрядной логики.

Цитата(GetSmart @ May 17 2016, 17:35) *
По поводу многочленов тоже не ясно. Тильда в Си применяется к целочисленным операндам и результат тоже целочисленный. Как и все остальные до этого обсуждаемые в этой ветке операторы. Предполагаю, что это противоречит терминологии алгебры многочленов.

Способ представления чисел уже основан на алгебре многочленов, ну и, естественно, и операции над ними. Дополнение до двух в этой алгебре необходимо лишь для исполнения операций вычитания - хотя от нас это все скрыто, но формально это так. А для операции тильда в смысле поразрядной логики все это многочленство излишне - достаточно лишь набор инверторов размером с операнд.

Сообщение отредактировал aiwa - May 17 2016, 16:44
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 17 2016, 17:05
Сообщение #129


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aiwa @ May 17 2016, 20:43) *
С дополнением искусственный пример придумывать не хочется, сколько себя помню, всегда применял тильду не по стандарту,
а только лишь для поразрядной логики.

Почему искуственный? Нужен пример демонстрирующий принципиальное отличие в рамках языка Си. Или похожего на Си языка программирования. Для демонстрации идеи термина в рамках языков программирования. Название/термин из алгебры многочленов может не весить (значить) ничего (большего, чем побитовая инверсия).

Цитата(aiwa @ May 17 2016, 20:43) *
Должен быть, но на практике не всегда.

В таких случаях неуместно "Закон жесток, но это закон.". Жесток только там и настолько, насколько корректен.

Цитата(aiwa)
Одни из важнейших терминов стандарта "lvalue" и "rvalue" вообще не имеют строгого определения и понимаются интуитивно.

Есть ключевые признаки этих терминов. "Объект с адресом и имеющий значение/содержимое" и "значение/содержимое". Слэш здесь понимается как обобщение. Хотя некоторые значения (булевы) в Си не могут быть содержимым.

Сообщение отредактировал GetSmart - May 17 2016, 19:34


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 17 2016, 17:57
Сообщение #130


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(GetSmart @ May 17 2016, 20:05) *
Почему искуственный? Нужен пример демонстрирующий принципиальное отличие в рамках языка Си. Или похожего на Си языка программирования. Для демонстрации идеи термина в рамках языков программирования.

Язык тут совершенно не причем, а важна целесообразность.
Дополнение в жизни как-то не нужно, поэтому и примеры будут искуственные.
А вот побитовые операции важны для манипулирования дискретными сигналами, или группой сигналов.
И то что эти операции проводятся над целочисленными операндами - всего лишь следствие аппаратной реализации.

Цитата(GetSmart @ May 17 2016, 20:05) *
Название/термин из алгебры многочленов может не весить (значить) ничего (большего, чем побитовая инверсия).

Инверсия битов - это быстрый косвенный способ вычисления дополнения. По аналогии с умножением: мы производим умножение столбиком,
но когда умножаем на 10 то просто дописываем сзади "0", опуская сам процесс умножение.
В системе счисления по основанию 3 дополнение до 3 надо будет вычислять уже по определению дополнения, хотя возможно и будет
более удобный и быстрый косвенный способ как инверсия в двоичной системе.

Цитата(GetSmart @ May 17 2016, 20:05) *
В таких случаях неуместно "Закон жесток, но это закон.". Жесток только там и настолько, насколько корректен.

Он определяет тильду как дополнение. Хотя и называет ее в разных местах по всякому.
Мы можем использовать свойства дополнения быть инверсией как результат порязрядного отрицания, но формально это все же дополнение.
Это кажется тавтологией, но здесь, как и при умножении матриц важны совпадения соразмерностей матриц.
Ведь логическое поразрядное отрицание восьмибитного операнда, по сути, это совокупность восьми логических операций,
а шеснадцатиразрядного - совокупность шестнадцати операций.
Поэтому расширение операнда в трактовке тильды как поразрядного отрицания уже изменяет сам набор операций, в отличие от дополнения
когда операция по сути та же.

Жизни программиста это никак не мешает, надо лишь помнить, что "побитовые операции" - сленг рожденный из-за схожести с настоящими побитовыми операциями.

Сообщение отредактировал aiwa - May 17 2016, 17:57
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 17 2016, 18:18
Сообщение #131


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Господа, вы занимаетесь казуистикой. Надо помнить одно - операции выполняются в регистрах (или аккумуляторе), имеющих конкретную длину - integer, и выполняются во всю эту длину, естественно. Это и использовано в стандарте на язык С.
Вот как там у 8-разрядных микроконтроллеров с int дело обстоит? Там, наверное, int8 до int16 или int32 не продвигается?

Нашел. http://ww1.microchip.com/downloads/en/Devi...c/50002053F.pdf
Раздел 5.6.1 Integral Promotion
Продвигается. Уже.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 17 2016, 18:25
Сообщение #132


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aiwa @ May 17 2016, 21:57) *
В системе счисления по основанию 3 дополнение до 3 надо будет вычислять уже по определению дополнения, хотя возможно и будет
более удобный и быстрый косвенный способ как инверсия в двоичной системе.
...
Он определяет тильду как дополнение. Хотя и называет ее в разных местах по всякому.
Мы можем использовать свойства дополнения быть инверсией как результат порязрядного отрицания, но формально это все же дополнение.
Это кажется тавтологией, но здесь, как и при умножении матриц важны совпадения соразмерностей матриц.
...
Жизни программиста это никак не мешает, надо лишь помнить, что "побитовые операции" - сленг рожденный из-за схожести с настоящими побитовыми операциями.

Не тавтологией. Словоблудием. Введением в заблуждение.
В стандарте указано без всяких разночтений, что целочисленные операнды представлены в двоичном коде. Отрицательные числа в двоичном дополнительном коде. Именно это нужно помнить и понимать. С этой базы нагружать оператор нереализуемыми свойствами бессмысленно. Пока в возможностях языка это видится как два названия одного и того же действия. Точнее из терминов/названий будет тот, который не содержит ложных ассоциаций. Кроме того, операция инверсии бит является частью группы логических побитовых/булевых операций и считать этот функционал тильды "работающим по-совместительству" нет оснований. Или можно вполне законно считать, что логические операторы тоже имеют воображаемые свойства из какой-либо ещё алгебры.

Приведённые примеры к языкам, похожим на Си отношения не имеют. Пока всё мимо.

Цитата
Он определяет тильду как дополнение. Хотя и называет ее в разных местах по всякому.

Использование в основном текстовом определении это тоже называние. Это ещё можно толковать как "желательный" вербальный термин, ничем функционально (по действию) не отличающийся от альтернативных названий. Пока нет аргументов утверждать, что тильда в Си это не побитовая инверсия. Аргументом может быть текст на Си, который должен выполнить что-то другое или большее, чем побитовую инверсию. А не словоблудие, в т.ч. в стандарте.

Сообщение отредактировал GetSmart - May 18 2016, 06:47


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 18 2016, 01:42
Сообщение #133


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(ViKo @ May 17 2016, 21:18) *
Господа, вы занимаетесь казуистикой. Надо помнить одно - операции выполняются в регистрах (или аккумуляторе), имеющих конкретную длину - integer, и выполняются во всю эту длину, естественно. Это и использовано в стандарте на язык С.

Размер регистра для компилятора алгоритмически не важен: он влияет только на производительность и размер генерируемого кода.
При выполнении большинства арифметических действий такое расширение по умолчанию вполне логично и оправдано: получается более короткий и быстрый код.
Грубо говоря, при этом меняется не размерность операндов (или результата) а размерность средства представления.
От хранения в большей по размеру коробке, хранимая вещь никак не изменится.

Цитата(ViKo @ May 17 2016, 21:18) *
Вот как там у 8-разрядных микроконтроллеров с int дело обстоит? Там, наверное, int8 до int16 или int32 не продвигается?

Не всегда продвигается. Например, я всегда использую char вместо int в качестве счетчика цикла - код получается меньше и быстрее.




Цитата(GetSmart @ May 17 2016, 21:25) *
Кроме того, операция инверсии бит является частью группы логических побитовых/булевых операций и считать этот функционал тильды "работающим по-совместительству" нет оснований. Другого до сих пор не обозначено.


Как раз в стандарте обозначено совершенно другое:
Цитата
The operand of ~ shall have integral or unscoped enumeration type; the result is the ones’ complement of its operand.

Это пункт 5. Unary operators.
Формально тильда не относится к группе логических поразрядных операторов.
И синоним у нее не тот который преподносит мелкософт, а "compl" - сокращение от официального названия операции дополнения.

Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 18 2016, 03:03
Сообщение #134


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aiwa @ May 18 2016, 05:42) *
Это пункт 5. Unary operators.
Формально тильда не относится к группе логических поразрядных операторов.

Фильтром (всякой чепухи и многозначности) всё-равно являются реализуемые возможности языка.

Приведу пример из суровых российских реалий якобы обхода подобного законодательного формализма производителями ламп накаливания. Выпускающиеся сейчас лампы называют ТЕПЛОНАГРЕВАТЕЛЬ, 200W. Идея обхода в том, что на законодательном уровне не дана совокупность (видимых/измеряемых) признаков, ИДЕНТИФИЦИРУЮЩАЯ лампу накаливания. Дабы закон не зависил от ушлости продавцов и производителей называющийх одну и ту же вещь по-своему. А в стандарте Си требуются определения ОТЛИЧИЙ от побитовой инверсии. Иначе суть написанного есть допустимый вариант называния, а не определение. Доказательством приводите практические отличия на языке (очень похожем на) Си, а не на "описательном" языке.

Сообщение отредактировал GetSmart - May 18 2016, 07:15


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
halfdoom
сообщение May 18 2016, 05:57
Сообщение #135


Профессионал
*****

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Цитата(GetSmart @ May 17 2016, 21:25) *
Пока нет аргументов утверждать, что тильда в Си это не побитовая инверсия.


Возможность использования оператора ~ как оператора побитовой инверсии вытекает из определения представления чисел в формате "дополнения до единицы". В C++ данная операция определена так, что инверсия производится после расширения типа до int. ТС успешно прошел по этим граблям, но все, что можно посоветовать в данном случае, это тщательнее читать спецификацию языка или использовать оператор исключающего ИЛИ, который гарантированно определен как побитовый.
Go to the top of the page
 
+Quote Post

13 страниц V  « < 7 8 9 10 11 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 06:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016