Аналог shl из Delphi

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Аналог shl из Delphi

Сообщение Lumen » 26.12.2005 (Пн) 19:10

Весм привет!

У меня вопрос к многоуважаемым форумчанам по дельфовскому оператору shl (побитовый сдвиг влево). Как его перевести на VB? Пробовал формулу x shl y = x * 2^y но получается другой результат. Собственно, вот что получается:
Код: Выделить всё
const stg:cardinal=$FA34C6A0;
par:=inttostr(stg shl 1);

Это Дельфи. Там par равен 4100558144
Так это выглядит в моем переводе на VB:
Код: Выделить всё
Const stg As Double = 4197762720#
par = Str(stg * 2^1)

Это Бэйсик. Тут par равен 8395525440.
Подскажите, плз, где я не прав.
Заранее спасибо.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 26.12.2005 (Пн) 20:18

Гм... Вот уж не знаю, как работает shl в делфях, но:

4197762720 = 11111010001101001100011010100000

Соответственно при сдвиге на один бит влево будет:

111110100011010011000110101000000 = 8395525440

Что и дает VB.
При сдвиге вправо, соответственно (stg / 2^1):

1111101000110100110001101010000 = 2098881360

Что тоже правильно. Возможно в делфях $FA34C6A0 не равно 4197762720 ;)
То, что для одних константа, для других только переменная...

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 26.12.2005 (Пн) 22:01

Возможно в делфях $FA34C6A0 не равно 4197762720

В том то и дело, что FA34C6A0 = 4197762720 даже в дельфях. Может какая-то бяка с типами переменных? Какой аналог переменных типа Caridnal в Бэйсике?

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 26.12.2005 (Пн) 23:00

Кажись понял в чём дело. Мне надо чаще Help читать. :? .
Фишка в том, что Cardinal в Delphi - беззнаковый тип. То есть при преобразовании числа в двоичную форму (FA34C6A0=11111010001101001100011010100000) оно считается отрицательным, т.к. старший бит равен 1. Тип переменной беззнаковый, т.е. эта единица отбрасывается. Полученное число 1111010001101001100011010100000 при преобразовании в десятичную запись дает 2050279072, что при умножении на 2^1, в свою очередь как раз и даёт 4100558144, о чём и кричит Delphi.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 27.12.2005 (Вт) 1:01

Ну что, вроде разобрались ;)
То, что для одних константа, для других только переменная...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот, SemrushBot и гости: 88

    TopList