Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 101 102 [103] 104 105 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1531
,
|
|
|
|
результат будет NativeInt, если не указано иное ошибка из-за переполнения возникнет при присвоении или при переполнении NativeInt ![]() ![]() var a,b,c,d:byte; begin b:=200; c:=200; d:=200; a:=b+c-d; // 200 end; |
|
Сообщ.
#1532
,
|
|
|
|
|
Сообщ.
#1533
,
|
|
|
|
Цитата --Ins-- @ Очень странно, значит такТо будет int, причем если a = 200, b = 200, то результат будет 400, как и ожидаемо. Урезание до разрядности результата происходит в конце. В этом случае наименьшее удивление и достигается double := int / int работает, т.к. область допустимых значений операции такая же, как область допустимых значений переменной-результата int := int / int не работает, т.к. область допустимых значений операции ниже, чем область допустимых значений переменной-результата int := byte + byte работает, т.к. область допустимых значений операции такая же, как область допустимых значений переменной-результата byte := byte + byte всё равно работает, даже не смотря нато, что область допустимых значений операции ниже, чем область допустимых значений переменной-результата |
|
Сообщ.
#1534
,
|
|
|
|
KILLER, под extended я подразумеваю просто вещественный тип
|
|
Сообщ.
#1535
,
|
|
|
|
Цитата --Ins-- @ Вот это я могу понять! Так же как и могу понять, что оператор / в принципе возвращает extended А я не могу. Аргументы были. Кстати, можно ли в дельфи так же удобно обработать переполнение? ![]() ![]() byte b = 200, c = 100; try { byte a = checked((byte)(b + c)); Console.WriteLine(a); } catch(OverflowException e) { Console.WriteLine(e.Message); } При этом checked может выставляться на одно выражение (как в примере), на блок кода (checked { }), на весь собираемый проект (в настройках компилятора). Для последнего случая есть антагонист - unchecked. |
|
Сообщ.
#1536
,
|
|
|
|
в арифметике, на сколько я знаю, по крайней мере в школьной, термин extended отсуствует Добавлено Цитата --Ins-- @ KILLER, под extended я подразумеваю просто вещественный тип Ну так тебе ведь уже про комплексные намекали? Вроде намекали, ну так значит за делфи и говори, а не за всю арифметику... |
|
Сообщ.
#1537
,
|
|
|
|
Цитата Повстанець @ byte := byte + byte То же относится и к int + int и к int * int и т.д. Переполнение - это не всегда ошибка. На переполнении может основываться алгоритм. Какой? Например - шифрования. И определить, ошибка эта или нет, может только сам программист опираясь на свою задачу. Карты в руки - определяй. скажешь что ошибка - будет ошибкой |
|
Сообщ.
#1538
,
|
|
|
|
Цитата Qraizer @ И вправду. Тогда я протупил. Гы. Ты, небось, за byte посчитал char (который по-дефолту знаковый)? Тогда у тебя 200 получилось -56. В Паскале/Дельфи byte - беззнаковый тип. Сделай unsigned char получишь те же 600. |
|
Сообщ.
#1539
,
|
|
|
|
Столь желанный вещественный результат из целочисленных операндов запиливается в виде функции. Если это кому-то надо.
|
|
Сообщ.
#1540
,
|
|
|
|
Я вообще не понимаю, нашли чо обсуждать, какую то синтаксическую перделку...
|
|
Сообщ.
#1541
,
|
|
|
|
Цитата Shaggy @ ошибка из-за переполнения возникнет при присвоении или при переполнении NativeInt Я в курсе, может я вопрос не так понял или ты мой ответ? Я писал, что обрезание до нужной разрядности происходит при присвоении результата |
|
Сообщ.
#1542
,
|
|
|
|
Цитата KILLER @ Я вообще не понимаю, нашли чо обсуждать, какую то синтаксическую перделку... Ну, был вброс. Мы достойно на него ответили ![]() Все эти холивары - это вообще языком почесать |
|
Сообщ.
#1543
,
|
|
|
|
Цитата --Ins-- @ Но про целочисленное деление ты уже пишешь пятую страницу. Тем не менее это тоже не всегда ошибка. И на нём тоже основываются алгоритмы. А чаще даже не алгоритмы, а просто вполне себе обыденные мелочи. То же относится и к int + int и к int * int и т.д. Переполнение - это не всегда ошибка. На переполнении может основываться алгоритм. Какой? Например - шифрования. И определить, ошибка эта или нет, может только сам программист опираясь на свою задачу. Карты в руки - определяй. скажешь что ошибка - будет ошибкой |
|
Сообщ.
#1544
,
|
|
|
|
Цитата MyNameIsIgor @ Кстати, можно ли в дельфи так же удобно обработать переполнение? {$OVERFLOWCHECKS ON/OFF} ? |
|
Сообщ.
#1545
,
|
|
|
|
Цитата KILLER @ а где еще? CL, Scheme, Haskell, больше навскидку не вспомню |