Целый день убил на поиск ошибки в коде, пока не понял, что булевское True считается равным -1. Почему так? Я всегда считал, что True = 1, поэтому просто использовал значение булевской переменной в вычислениях. Ниже привожу простой пример, который в результате выдаёт -1.
Код
Sub test()
Dim n As Boolean
Dim m as Integer
n = True
m = 1
MsgBox (n * m)
End Sub
Объясните, пожалуйста, почему результат с минусом. Проверено на Excel 2010 и Excel 2013. То, что можно заводить дополнительные переменные или ветки по условиям, я понимаю, но меня интересует сам факт отрицательного True.
уберите пустые строки, код оформите тегом <...>, ответ на ваш вопрос есть в справке MSDN ... оставлю линк - пока не оформите свой пост Нормально - претензии у модераторов могут появиться и к вам и ко мне (если отвечу на такую постановку вопроса как ваша)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
хорошо... обратите внимание на Преобразование типов .. делая умножение (арифметическое действие) - вы неявно преобразовываете переменную в числовой формат... преобразовывается в -1 ... такова жизнь
Цитата
Когда Visual Basic преобразует значения Boolean в числовые типы, False становится 0, а True становится -1.
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Почему зря? Я, конечно, в текущей программе просто беру результат вычисления по модулю, но, вдруг, в дальнейшем MS изменит интерпретацию True? И будет 1, а не -1? А я забуду про модуль.
Юрий М написал: Vetermsk написал: больше ни за что не буду использовать булевские переменные в вычисленияхИ зря!
А вот и не зря. Не стоит смешивать мелкое с мягким, если только вы не пишете какую-нибудь систему реального времени, где каждая микросекунда сэкономленных вычислений дорога. Boolean для логики, вот и используем только для неё. В C# true - это 1.