Страница: 1 |
Вопрос: Преобразование типов данных | Добавлено: 08.12.09 21:55 |
Автор вопроса: ![]() |
Здравствуйте, люди добрые.
Столкнулся с такой проблемой. Есть две переменные типа Byte Dim x As Byte, y As Byte
В случае если x<y, при попытке проверки вот такого условия: If (x - y)<0 Then Beep
возникает ошибка "Overflow". Понятно, что результат вычисления выражения (x-y) будет в этом случае числом отрицательным, то есть совсем не Byte, и лечить это можно например так: If (CInt(x) - CInt(y))<0 Then Beep
но раньше этот код у меня работал, и я уверен, ну на 90%, что бывал у меня x меньше y. Галлюцинациями не страдаю, вроде. Объясните, пожалуйста, что я сделал не так? Или в VB всегда так, и мне просто повезло, что я не спотыкался раньше об этот пробел в своих познаниях? |
Ответы | Всего ответов: 5 |
Номер ответа: 1 Автор ответа: ![]() ![]() ICQ: 553816426 Вопросов: 10 Ответов: 99 |
Профиль | Цитата | #1 | Добавлено: 08.12.09 22:03 |
А почему не
|
Номер ответа: 2 Автор ответа: ![]() ![]() ICQ: 553816426 Вопросов: 10 Ответов: 99 |
Профиль | Цитата | #2 | Добавлено: 08.12.09 22:19 |
Не могло это работать. Потому что результат выполнения арифметических действий над переменными одного типа, будет того же типа, что и переменные. Может раньше переменные Х и У небыли явно объявлены и имели тип variant? Или при выполнении программы Х никогда не был меньше? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 3 Ответов: 22 |
Профиль | Цитата | #3 | Добавлено: 08.12.09 22:44 |
По поводу (x-y)<0, там (x-y) частью другого выражения был, я суть проблемы хотел передать, вот и родил этот индусский код.
Потому что результат выполнения арифметических действий над переменными одного типа, будет того же типа, что и переменные.
До меня, пока ответа ждал, начало вот это вот доходить. У меня переменные Integer были, я потом наткнулся на их определение и на Byte тип заменил, потому как Integer там ни к чему. Как менял помню, как работало после этого тоже помню.... вроде. Срочно нужно отсыпаться, а то thrashing уже пошел. Спасибо огромное! |
Номер ответа: 4 Автор ответа: ![]() ![]() ICQ: 553816426 Вопросов: 10 Ответов: 99 |
Профиль | Цитата | #4 | Добавлено: 08.12.09 22:46 |
Бывает ![]() |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ICQ: 308-534-060 Вопросов: 20 Ответов: 1860 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 10.12.09 22:08 |
Ребят, не жоптесь на целые числа в программе использовать тип Long, т.к. процессоры у вас 32-битные (как минимум) и если будете байт занимать. Все равно при вычислении процессор задействует 32-битный регистр целиком. Есть смысл еще ладно, когда API-функция тип byte требует (редко) или если надо в структуре байты представить, скажем компоненты 32-битных цветов при обработке графики, картинок, фото ...видео))) А что?))) |
Страница: 1 |
|