Оператор & для числовых типов (.NET)

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Оператор & для числовых типов (.NET)

Сообщение Joo » 15.05.2010 (Сб) 15:22

Случайно обнаружил, когда в коде по запарке вместо i+=UpdateRecords() написал i&=UpdateRecords() и вместо ожидаемого результата в виде числа 3 обнаружил 300000 ツ, т.е. к концу добавлялся 0 как в строку, да i это Integer
Наверное многие знают об этом, но для меня это был сюрприз.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Оператор & для числовых типов (.NET)

Сообщение Хакер » 15.05.2010 (Сб) 17:04

Маразм.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Оператор & для числовых типов (.NET)

Сообщение FaKk2 » 15.05.2010 (Сб) 20:28

Не совсем понятно, что и как у автора получилось.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Оператор & для числовых типов (.NET)

Сообщение 1Steps » 16.05.2010 (Вс) 7:41

А что тут непонятного?
(+=) - Прибавляет уже к существующему результату.
(&=) - Добавляет в конец строки.
Поэтому нужно быть осторожным. Всё зависит от типа переменной.
Удалена за ненадобностью.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Оператор & для числовых типов (.NET)

Сообщение Joo » 16.05.2010 (Вс) 8:08

На примере:
Код: Выделить всё
Sub Main()
        Dim x As Integer = 1
        Dim y As Integer = 1
        x += 1
        y &= 1
        Console.WriteLine("X={0}; Y={1}", x, y)
        'Выведет X=2; Y=11
        Console.ReadLine()
    End Sub
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Оператор & для числовых типов (.NET)

Сообщение 1Steps » 16.05.2010 (Вс) 8:21

Ну правильно, то что я тебе сказал.
А вообще, что бы иметь предупреждения, то в Project>properties>compile первые три строки ставим в "error".
Студия всегда будет упреждать тебя.
Вложения
example1.PNG
example1.PNG (25.72 Кб) Просмотров: 2050
Удалена за ненадобностью.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Оператор & для числовых типов (.NET)

Сообщение Хакер » 16.05.2010 (Вс) 12:53

&= первым операндом должен принять строку.

При этом первый операнд — L-Value. Автоматическое приведение типа L-Value операндов, равно как и ByRef-аргументов, — зло.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Оператор & для числовых типов (.NET)

Сообщение FaKk2 » 16.05.2010 (Вс) 13:03

Ах, это в VB такое творится. То-то в C# я безуспешно пытался провести этот фокус.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Оператор & для числовых типов (.NET)

Сообщение Joo » 16.05.2010 (Вс) 14:03

Лично мне вообще в голову не могло придти, что такое возможно.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Оператор & для числовых типов (.NET)

Сообщение Денис » 16.05.2010 (Вс) 18:33

Просто для бейсика традиционна нестрогая типизация. И в MS об этом помнят.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Оператор & для числовых типов (.NET)

Сообщение Хакер » 16.05.2010 (Вс) 18:41

Денис, а ты не слышал об ошибке «ByRef argument type missmatch» в VB (а не в VB.NET)?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Оператор & для числовых типов (.NET)

Сообщение Денис » 16.05.2010 (Вс) 22:43

Слышал, конечно, но между тем, следующий код прекрасно работает:
Код: Выделить всё
Sub Main()

Dim a As String
Dim b As Long
Dim c As Long

a = "12"
b = 24

c = a + b

Debug.Print c

c = a & b

Debug.Print c

End Sub


В VB6. SP6.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Оператор & для числовых типов (.NET)

Сообщение iGrok » 16.05.2010 (Вс) 22:54

А каким боком этот код относится к той ошибке?
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Оператор & для числовых типов (.NET)

Сообщение Хакер » 16.05.2010 (Вс) 22:58

Денис, тогда другой вопрос: ты знаешь, что такое L-Value?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

    TopList