Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Преобразование типов данных Добавлено: 08.12.09 21:55  

Автор вопроса:  hip
Здравствуйте, люди добрые.
Столкнулся с такой проблемой. Есть две переменные типа 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
А почему не
  1. If x < y Then Beep
проще и результат тотже?

Ответить

Номер ответа: 2
Автор ответа:
 Саня



ICQ: 553816426 

Вопросов: 10
Ответов: 99
 Профиль | | #2 Добавлено: 08.12.09 22:19
Не могло это работать. Потому что результат выполнения арифметических действий над переменными одного типа, будет того же типа, что и переменные. Может раньше переменные Х и У небыли явно объявлены и имели тип variant? Или при выполнении программы Х никогда не был меньше?

Ответить

Номер ответа: 3
Автор ответа:
 hip



Вопросов: 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
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #5
Добавлено: 10.12.09 22:08
Ребят, не жоптесь на целые числа в программе использовать тип Long, т.к. процессоры у вас 32-битные (как минимум) и если будете байт занимать. Все равно при вычислении процессор задействует 32-битный регистр целиком. Есть смысл еще ладно, когда API-функция тип byte требует (редко) или если надо в структуре байты представить, скажем компоненты 32-битных цветов при обработке графики, картинок, фото ...видео))) А что?)))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам