Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Duża liczba do long
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003
Duża liczba do long

Witam

Mam liczbę np. 3271097410 i muszę ja wprowadzić do zmiennej long. Sprawdziłem że ma 32 bity więc musi się do niego zmieścić, więc potrzenuję ją przerobić na 'signed'. W jaki sposób VB zapisuje liczby ujemne?


_____________________________________________
www.mob.abc.pl - moja strona o VB

13-04-2005 08:11
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Już sobie poradziłem.

Uzyłem varianta i warunku if liczba > 2^31 then liczba = liczba - 2 ^32


_____________________________________________
www.mob.abc.pl - moja strona o VB

13-04-2005 10:05
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

VB zapisuje liczby całkowite ujemne (Long, Integer i Currency) w kodzie uzupełnień do dwóch (U2).

Jeśli zapisałeś tą liczbę do Variant'a, to prawdopodobnie została zmieniona na Single i spowodowało to zmianę jej wartości (czyli efekt raczej nieporządany). Spróbuj użyć do jej przechowywania zmiennych Currency.

I pytanie: w czym trzymasz ją przed przypisaniem do zmiennej typu Long? Bo może da się to zrobić łatwiej (np. bezpośrednio kopiując ją do zmiennej).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

13-04-2005 13:43
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Dzięki za odpowiedź, przed przypisaniem jej do long trzymałem ją w variancie, ale jej wartość nie zminiła się (mam pewność bo serwer gg nie odrzucił hasha hasła). Czy przy "bezpośrednie przypisanie do zmiennej" myślisz o copymemory/movememory? Też próbowałem ale nie wiem czemu to nie zadziałało.

Pisałem funkcję zamiany znaków na liczbę:

Public Function getnumer(ByVal kod As String) As Long
    Dim a As Currency, i As Long
    For i = 1 To Len(kod)
        a = a + Asc(Mid$(kod, Len(kod) - i + 1, 1)) * (256 ^ (Len(kod) - i))
    Next
    If a > 2 ^ 31 + 1 Then a = a - 2 ^ 32

    getnumer = a
End Function

i jak narazie działa dobrze, więc narazie zostawiam bez zmian.


_____________________________________________
www.mob.abc.pl - moja strona o VB

13-04-2005 14:24
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
Wszystkich odpowiedzi: 3 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1