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

 
 
13 страниц V  « < 5 6 7 8 9 > »   
Reply to this topicStart new topic
> Детская ошибка
jcxz
сообщение May 9 2016, 16:51
Сообщение #91


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(scifi @ May 9 2016, 18:49) *
Было бы неплохо, конечно, обобщить передовой опыт, родить супер-пупер язык для МК, который в 100500 раз более лучше, чем Си, и отправить его на машине времени туда, куда надо. Но что-то мне подсказывает, что троечникам это не поможет. Учебник всё равно надо читать.

Неумехи просто станут делать другие ошибки. И опять будут во всём винить компилятор. А больше ничего не изменится.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 9 2016, 16:57
Сообщение #92


Гуру
******

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



QUOTE (dxp @ May 9 2016, 19:29) *
Питон - великолепный язык, очень простой, но при этом необычайно мощный, гибкий.

Ага. Беды начинаются, когда "обучившиеся программированию" начинают на нем программировать sad.gif.
QUOTE
И создавался он не ради языка, а как язык для обучения программированию

Вот то, что он создавался для обучения программированию - вот это и есть родимое пятно всех "языков ради языка". Ни Си ни Си++, ни тот же Perl не создавались для обучения, они создавались для РАБОТЫ.
QUOTE
, но оказался очень эффективным и для решения практических задач.

"Мама мыла раму..." © sad.gif. В реальности, все хуже - не далее, как месяц назад очередная утилитка тупо отказалась запускаться вываливаясь с характерными питоновскими воплями sad.gif. Утилитка о NXP/Jennic просто командная строка, но зачем то размером 250K и DLL-ок на полмега. За что?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 9 2016, 23:30
Сообщение #93


Местный
***

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



Цитата(halfdoom @ May 9 2016, 17:51) *
Если сделать первый операнд знаковым, то результат может показаться странным, т.к. числа до 0х8000 будут давать другой результат.

Вот как раз если первый операнд сделать знаковым, то в случае операции ~ красота картинки сохранится:
temp2 = 0xFFFE расширится его до 0xFFFFFFFE, а последующая операция ~temp2 обнулит лишние старшие навязанные два байта.

Поэтому в начальном примере код if(~(signed int16)temp2 !=temp1) continue; даст ожидаемый результат.

Цитата(halfdoom @ May 9 2016, 17:51) *
И что вас здесь смущает?


Согласно великому классику "В компиляторе все должно быть прекрасно...".
В нашем конкретном случае с логическими побитовыми операциями вынужденность добавления явных преобразований похожих на
Код
if(~(signed int16)temp2 !=temp1) continue;

либо

if( (unsigned int16)(~temp2) !=temp1) continue;

наводит на мысль, что некоторые моменты в стандарте шиворот-навыворот.

Сообщение отредактировал aiwa - May 9 2016, 23:31
Go to the top of the page
 
+Quote Post
halfdoom
сообщение May 10 2016, 04:20
Сообщение #94


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

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



Цитата(aiwa @ May 10 2016, 02:30) *
наводит на мысль, что некоторые моменты в стандарте шиворот-навыворот.


Стандарт не обязан быть логичным для всех, потому что это стандарт. Однако если вспомнить, что все операции над переменными типа char и short производятся только после приведения к типу int, то многое становится понятным. Почему к int? Потому что существовали и, видимо, существуют архитектуры в которых арифметические операции возможны только для операндов с размером машинного слова, которое и представлено типом int. Иными словами, правила преобразований в С архитектурно зависимы, и в спорных случаях следует использовать явное приведение типов.

Кроме того, попробуйте разобраться, как должны работать следующие операторы:
Код
unsigned short a, b;

if (~(a + b) & ~0xf) {...}

short a, b;

if (~(a + b) & ~0xf) {...}
Go to the top of the page
 
+Quote Post
svss
сообщение May 10 2016, 05:13
Сообщение #95


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(zltigo @ May 9 2016, 17:56) *
Если "программист" не знает языка и НЕ ХОЧЕТ читать сообщения компилятора ПОДАВИВ ИХ, то да.

Бывает хуже. Например IAR выдаёт предупреждение "unreachable code", а Keil то же место тихо-спокойно пропускает.
(прямо относится к исходному мессаджу)

О сколько нам открытий трудных..
Go to the top of the page
 
+Quote Post
dxp
сообщение May 10 2016, 06:57
Сообщение #96


Adept
******

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



QUOTE (zltigo @ May 9 2016, 22:57) *
Ага. Беды начинаются, когда "обучившиеся программированию" начинают на нем программировать sad.gif.

Беспредметное, безосновательное утверждение.

QUOTE (zltigo @ May 9 2016, 22:57) *
Вот то, что он создавался для обучения программированию - вот это и есть родимое пятно всех "языков ради языка". Ни Си ни Си++, ни тот же Perl не создавались для обучения, они создавались для РАБОТЫ.

Языком для обучения он позиционировался в 1990 году, с тех пор практически сразу стал языком для решения практических задач. Его ни в коем случае нельзя сравнивать с C/C++ - совершенно разные возможности и ниши, но если сравнивать с перлом, то сравнение будет не в пользу последнего.

QUOTE (zltigo @ May 9 2016, 22:57) *
"Мама мыла раму..." © sad.gif. В реальности, все хуже - не далее, как месяц назад очередная утилитка тупо отказалась запускаться вываливаясь с характерными питоновскими воплями sad.gif. Утилитка о NXP/Jennic просто командная строка, но зачем то размером 250K и DLL-ок на полмега. За что?

Понятия не имею, в чём вы. Программа на питоне - это текстовый скрипт. Для исполнения она требует исполняемой среды. Про какие dll речь, мне не ведомо.

Если наводите критику, так делайте это предметно. Конкретно что кривого в питоне, какие косяки в его дизайне. Про Аду не спрашиваю, про неё сам знаю. И Ада - действительно искусственно созданный ЯП по ТЗ МО США. Но питон - нет, у него совершенно другая история и свой путь развития. И питону уже не надо доказывать своё право на существование - он давно это доказал делом. Когда я познакомился с питоном лет 10 назад, так забыл как страшный сон эти sed'ы и awk, и с тех пор все утилиты для себя пишу на питоне, ни разу не пришлось разочароваться. И у всех, кого знаю, кто познакомился с питоном, чем плотнее знакомство, тем выше оценка. Подозреваю, что вы с ним реально почти не знакомы, но пришлось столкнуться с парой образчиков говнокода, отсюда и мнение о языке. Тут можно напомнить, что на сях легко наговнкодить так, что питонам и не снилось. Но это не характеризует сам язык.


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


Местный
***

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



Цитата(halfdoom @ May 10 2016, 07:20) *
Стандарт не обязан быть логичным для всех, потому что это стандарт.

Полностью согласен, но мне кажется он должен при возможности следовать канонам формальной логики.
Компилятору желательно еще быть и удобным: повторюсь с примером, когда знаковый тип 'char' компилятор всегда
трактует как 'unsigned char' по желанию пользователя.


Цитата(halfdoom @ May 10 2016, 07:20) *
Потому что существовали и, видимо, существуют архитектуры в которых арифметические операции возможны только для операндов с размером машинного слова, которое и представлено типом int. Иными словами, правила преобразований в С архитектурно зависимы, и в спорных случаях следует использовать явное приведение типов.

Да этот вопрос как бы и не касается архитектуры - только небольшая рокировка явного и неявного преобразования типов исключительно для операции ~: операции результат которой остается в разрядной рамке операнда.
Если компилятор способен сгенерировать ожидаемый код при явном приведении типов ((uint16_t)~temp1), то неплохо бы иметь такую возможность по умолчанию, не мозоля пальцы на явное преобразование и впоследствии глаза при чтении текста.
Для полноты картины при бинарных операциях неплохо бы проводить расширение к большему по размеру операнду.

Цитата(halfdoom @ May 10 2016, 07:20) *
Кроме того, попробуйте разобраться, как должны работать следующие операторы:
Код
unsigned short a, b;

if (~(a + b) & ~0xf) {...}

short a, b;

if (~(a + b) & ~0xf) {...}


Все довольно просто: результат (unsigned short+unsigned short) не будет 'unsigned short' потому что операция суммирования выходит за пределы разрядной сетки 'unsigned short' и результат будет зависеть от архитектуры в согласии с правилами целочисленного расширения.

Сообщение отредактировал aiwa - May 10 2016, 08:05
Go to the top of the page
 
+Quote Post
scifi
сообщение May 10 2016, 08:13
Сообщение #98


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(aiwa @ May 10 2016, 10:58) *
повторюсь с примером, когда знаковый тип 'char' компилятор всегда трактует как 'unsigned char' по желанию пользователя.

Тип char можно назвать знаковым только по неведению. Не забивайте себе голову лишними предрассудками, а просто загляните в стандарт. Да, неопределённость в вопросе знаковости типа char раздражает. Видимо, есть "исторические причины". Тем не менее, с типом char не надо делать арифметику. Тип char - он для букв, а не чисел.

Цитата(aiwa @ May 10 2016, 10:58) *
Если компилятор способен сгенерировать ожидаемый код при явном приведении типов ((uint16_t)~temp1), то неплохо бы иметь такую возможность по умолчанию, не мозоля пальцы на явное преобразование и впоследствии глаза при чтении текста.

Код, который для вас кажется ожидаемым, для кого-то другого легко может быть неожиданным. Логика стандарта при приведении типов абсолютно понятна: она заточена под традиционную арифметику с числами. Операции над битами - это нечто иное. Ну что ж, привыкайте. Почитайте стандарт, и тогда компилятор не будет выдавать "неожиданный код".
Go to the top of the page
 
+Quote Post
halfdoom
сообщение May 10 2016, 08:49
Сообщение #99


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

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



Цитата(aiwa @ May 10 2016, 10:58) *
Все довольно просто: результат (unsigned short+unsigned short) не будет 'unsigned short' потому что операция суммирования выходит за пределы разрядной сетки 'unsigned short' и результат будет зависеть от архитектуры в согласии с правилами целочисленного расширения.

Пример немного не об этом, но уж раз вы завели речь о разрядной сетке - при использовании uint8_t вместо short все равно будет расширение типа до int, хотя результат помещается в short.

Цитата(dxp @ May 10 2016, 09:57) *
Языком для обучения он позиционировался в 1990 году, с тех пор практически сразу стал языком для решения практических задач. Его ни в коем случае нельзя сравнивать с C/C++ - совершенно разные возможности и ниши, но если сравнивать с перлом, то сравнение будет не в пользу последнего.

Это, конечно, жуткий оффтопик, но здесь с вами согласен - сравнивать питон следует только с перлом или авк.

Цитата(dxp @ May 10 2016, 09:57) *
Если наводите критику, так делайте это предметно. Конкретно что кривого в питоне, какие косяки в его дизайне.


Претензий к нему не много, но они вшиты намертво и меняться не будут:

отвратительный дизайн ООП модели (числа и строки не являются объектами, никуда не годный синтаксис доступа к родительским классам - сравните с C++);
очень медленные треды (из-за кривого дизайна интерпретатора), решается вывертами типа мультипроцессинга;
global/nonlocal - это вообще без комментариев;
де-факто существуют две несовместимые версии языка: python2/python3, а так-же наблюдается антагонизм сторонников как первого, так и второго;
однострочные лямбды - ограничение, видимо, произрастает из семантической значимости величины отступа.

Мы попытались перенести проект написанный на C++ и убедились, что овчинка совершенно не стоит выделки. А вот для скриптов, тест-модулей и прочих несложных программ питон подходит просто идеально, но здесь с ним в конкуренцию вступает Ruby.
Go to the top of the page
 
+Quote Post
aiwa
сообщение May 10 2016, 09:43
Сообщение #100


Местный
***

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



Цитата(scifi @ May 10 2016, 11:13) *
Код, который для вас кажется ожидаемым, для кого-то другого легко может быть неожиданным.

Я не имею ввиду себя или еще кого-то конкретно. Ожидаемый - с точки зрения формальной логики: если b=~а то-> ~b == а.

Цитата(halfdoom @ May 10 2016, 11:49) *
Пример немного не об этом, но уж раз вы завели речь о разрядной сетке - при использовании uint8_t вместо short все равно будет расширение типа до int, хотя результат помещается в short.

Я описал только первый вариант Вашего примера потому что для второго, где short, действия совершенно аналогичны - в силу того, что разряд суммы выходит за пределы двухбайтной сетки.
Но в обоих случаях тип операнда для ~ уже не является типом разрядности short по априори, до выполнения самой арифметической операции с необходимостью расширения операндов.

В принципе, все сводится к случаю, когда источником операнда для ~ является lvalue-значение.

Go to the top of the page
 
+Quote Post
scifi
сообщение May 10 2016, 10:42
Сообщение #101


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(aiwa @ May 10 2016, 12:43) *
Я не имею ввиду себя или еще кого-то конкретно. Ожидаемый - с точки зрения формальной логики: если b=~а то-> ~b == а.

Ну вот и хорошо, что не ожидаемый. Может быть, хоть это заставит говнокодера заглянуть в учебник и/или справочник. А то ведь если делать программы, руководствуясь одной лишь формальной логикой, то можно такого наворотить... Всё-таки программирование микроконтроллеров требует чуть более глубокого владения инструментарием.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 10 2016, 11:58
Сообщение #102


Гуру
******

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



QUOTE (dxp @ May 10 2016, 09:57) *
Беспредметное, безосновательное утверждение.

Увы, но для меня лично основаним является то, что за всю жизнь я ни одной вменяемой программы на питоне не встретил sad.gif. Я понимаю, что мой личный опыт не может претендовать на всеобъемлимость, но тем неменее sad.gif.
QUOTE
но если сравнивать с перлом, то сравнение будет не в пользу последнего.

Прямо противоположного мнения sad.gif. Он базируется на слишком небольшом, но все ЛИЧНОМ опыте копания и ОБИЛЬНОЙ доработки питоновских и перловых текстов.
QUOTE
Понятия не имею, в чём вы. Программа на питоне - это текстовый скрипт. Для исполнения она требует исполняемой среды. Про какие dll речь, мне не ведомо.

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

допустим, что мне не повезло, но сам факт говнокодерства на языке, котрый позиционируется, как правильный и не говнокодерский все же о чем то говорит sad.gif
QUOTE
Тут можно напомнить, что на сях легко наговнкодить так, что питонам и не снилось.

С этим спору нет sad.gif.

QUOTE (halfdoom @ May 10 2016, 11:49) *
де-факто существуют две несовместимые версии языка: python2/python3, а так-же наблюдается антагонизм сторонников как первого, так и второго;

И до кучи принципиальное отсутствие стандарта языка sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dxp
сообщение May 10 2016, 12:49
Сообщение #103


Adept
******

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



QUOTE (halfdoom @ May 10 2016, 14:49) *
отвратительный дизайн ООП модели (числа и строки не являются объектами, никуда не годный синтаксис доступа к родительским классам - сравните с C++);

Э-э.., простите, но как вы сравниваете несравнимые вещи? Ответьте для начала на вопрос: что является классом в С++ и что является классом в Питоне? Правильный ответ вам сразу покажет, что вы просто пытаетесь юзать классы Питона точно так же как классы С++. А у них общего только название.

QUOTE (halfdoom @ May 10 2016, 14:49) *
очень медленные треды (из-за кривого дизайна интерпретатора), решается вывертами типа мультипроцессинга;

Треды как треды. Всё обычно для интерпретируемого языка. Или вы его С++ опять сравниваете?

QUOTE (halfdoom @ May 10 2016, 14:49) *
global/nonlocal - это вообще без комментариев;

Тут не понял.

QUOTE (halfdoom @ May 10 2016, 14:49) *
де-факто существуют две несовместимые версии языка: python2/python3, а так-же наблюдается антагонизм сторонников как первого, так и второго;

Насчёт антагонизмов информация устаревшая. В бытность появления тройки, когда она была сырая и глючная, народ плевался, т.к. оные глюки и недоделки мешали работать. Но начиная с версии 3.3+ всё стало пристойно. То, что они отделили развитие, момент спорный, но как показывает практика, решение было скорее правильным, чем не. Можно было и дальше тащить совместимость, как это делает С/C++, обрастая диалектами и поддерживая кривизну исходного дизайна языка, но они решили пофиксить т.н. "бородавки" языка, что привело к некоторой несовместимости. В реальности можно пользоваться и тем, и другим (там немного отличий, на моём уровне так вообще кроме как то, что оператор print сделали функцией, разницы нет), новые вещи лучше писать сразу под тройку.


QUOTE (halfdoom @ May 10 2016, 14:49) *
Мы попытались перенести проект написанный на C++ и убедились, что овчинка совершенно не стоит выделки.

Не очень понял, что вы пытались сделать. Просто тупо переписать код С++ на Питон? Зачем? Какой выигрыш вы ожидали от этого? Работать будет медленнее, это очевидно. Хотели лёгкости модифицирования кода? Но так и код должен быть по-иному организован. Просто тупо портировать С++ код на Питон не получится - ЯП с совершенно другими парадигмами, требует другие подходы, даёт иной выигрыш. Лучшее, что можно было сделать - это внедрить Питон в С++ программу как embedded движок для решения определённого класса задач, если таковые имеются, и которые эффективнее решаются на Питоне.

QUOTE (halfdoom @ May 10 2016, 14:49) *
А вот для скриптов, тест-модулей и прочих несложных программ питон подходит просто идеально, но здесь с ним в конкуренцию вступает Ruby.

Так Питон и есть скриптовый язык. sm.gif Насчёт несложных, это пардоньте, от подхода и целей зависит - очень неслабые приложения на нём пишут и делают это весьма эффективно. Руби - да, конкурент, с Руби Питон можно сравнивать, но не с С++ ни разу. Питон правильно было бы сравнить с языком Матлаба, только Питон шире, гибче и мощнее. Не приходит же в голову сравнивать язык Матлаба с С++ и потом ругать его за то, что плюсовая программа плохо ложится на m-файлы.


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


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

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



Цитата(dxp @ May 10 2016, 15:49) *
Э-э.., простите, но как вы сравниваете несравнимые вещи? Ответьте для начала на вопрос: что является классом в С++ и что является классом в Питоне?


Они вполне сравнимы, отличается реализация, добавляется возможность расширения классов и динамическое разрешение методов, но сути это меняет. Если по смыслу задачи требуется иметь четырехуровневую иерархию, то ее придется реализовать или заменять разными костылями. А далее мы с удовольствием ругаем конструкцию вида super(MyClass, self) или изучение списка self.__class__.__bases__. Кому как, а мне такой подход кажется излишне сложным для скриптового языка. Туда же отнесу и бесконечные self.

Цитата(dxp @ May 10 2016, 15:49) *
Треды как треды. Всё обычно для интерпретируемого языка. Или вы его С++ опять сравниваете?


Да, я сравниваю эффективность реализации. Погуглите про global interpreter lock.

Цитата(dxp @ May 10 2016, 15:49) *
Тут не понял.


Никому не нужные ключевые слова из-за изначально плохо продуманной концепции видимости переменных.

Цитата(dxp @ May 10 2016, 15:49) *
Насчёт антагонизмов информация устаревшая.


Тот факт, что на машине приходится держать оба варианта, говорит сам за себя.

Цитата(dxp @ May 10 2016, 15:49) *
Не очень понял, что вы пытались сделать. Просто тупо переписать код С++ на Питон? Зачем? Какой выигрыш вы ожидали от этого? Работать будет медленнее, это очевидно. Хотели лёгкости модифицирования кода? Но так и код должен быть по-иному организован. Просто тупо портировать С++ код на Питон не получится - ЯП с совершенно другими парадигмами, требует другие подходы, даёт иной выигрыш. Лучшее, что можно было сделать - это внедрить Питон в С++ программу как embedded движок для решения определённого класса задач, если таковые имеются, и которые эффективнее решаются на Питоне.

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

Цитата(dxp @ May 10 2016, 15:49) *
только Питон шире, гибче и мощнее.


Все это только следствие используемой модели, допускающей динамическое изменение практически всего в процессе работы. Синтаксис и семантика собственно языка не заслуживает положительных эпитетов.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 11 2016, 04:40
Сообщение #105


.
******

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



Цитата(zltigo @ May 9 2016, 20:11) *
Они и сейчас так делают.

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

По поводу вумного ИАРа, выкинувшего ветвь исходника, топикстартер правильно поднял тему. Отсутствие предупреждения "unreachable code" тянет на недоработку компилятора. Несложно вставить это ругательство в алгоритм компилятора во все места, где удаляется ветвь кода. Конструктивных возражений здесь не видно. Проглядели, вероятно.

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

Цитата
Никакого МОЛЧАНИЯ у IAR, как и других нет, если не не подавлять сообщения.

Это из другой оперы.
Цитата
[Pe068]: integer conversion resulted in a change of sign

Странное сообщение. Для if. Точнее для сравнения (в худшем случае) знакового rvalue и беззнакового.

С инверсией (~, тильда) (не читал стандарт, но судя по этому обсуждению) в стандарте есть кривизна в том, что два раза может происходить расширение операнда. Сперва до int, потом до ширины второго операнда, если он шире. Это немного криво само по себе и из-за разной ширины int на разных платформах. Но если так исторически сложилось, то это уже навсегда. Гарантированную мультиплатформенную совместимость некоторых выражений с тильдой остаётся делать явным приведением.


Цитата(aiwa)
Для полноты картины при бинарных операциях неплохо бы проводить расширение к большему по размеру операнду.

Код
char a;
short b;
long c;

c = ~a & b & c;


Идеально всё-равно не получится. Чуть менее криво или чуть более в таких выражениях. В комбинации с другими операторами будет новая кривизна. Захочется ведь ещё беззнаково расширять.

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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


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


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