Results 1 to 10 of 10

Thread: binary 128bit and DLL

  1. #1

    binary 128bit and DLL

    Hello, excuse me for using a translator, my English is zero.

    I like to play with the vba of excel, and already I have the thinbasic to some time but I never used it

    I would like to know if you have binary type comparators with 128bit capacity and bits counting,

    like that
    HTML Code:
    Function Bit_Count(ByVal number As Long) As Long
         Dim Aa As Long
         Do While number
              number = number And (number - 1)
              Aa = Aa + 1
         Loop
    
         Bit_Count = Aa
    End Function
    
    Function Bit_AND_Bit(ByVal Bit1 As Long, ByVal Bit2 As Long) As Long
         Bit_AND_Bit = Bit1 And Bit2
    End Function
    
    Function Bit_OR_Bit(ByVal Bit1 As Long, ByVal Bit2 As Long) As Long
         Bit_OR_Bit = Bit1 Or Bit2
    End Function
    
    Function Bit_XOR_Bit(ByVal Bit1 As Long, ByVal Bit2 As Long) As Long
         Bit_XOR_Bit = Bit1 Xor Bit2
    End Function
    And create variables at runtime, or just using dictionaries to define something like this.
    And if it's possible to mount a DLL with the thinbasic
    I tried other languages, but I could not get rid of the "{}" and the need to ";" At the end of each line, it's annoying

    I like to set up functions with cascading ties and comparators and I'm kind of addicted to spaghetti

    See you later and success.
    Eduardo.



    ola, desculpe-me por utilizar tradutor, meu ingles é zero

    eu gosto de brincar com o vba do excel, e já tenho o thinbasic a algum tempo mas nunca o usei

    gostaria de saber se tem comparadores lógicos tipo binário com capacidade de 128bit e Bits counting,
    e criar variáveis em tempo de execução , ou apenas usando dicionários para definir algo parecido
    tipo assim

    e se é possível montar uma DLL com o thinbasic
    tentei outras linguagens, mas não consegui me abtuar com os "{ }" e com a necessidade de ";" no final de cada linha , é algo irritante

    gosto de montar funções com laços em cascata e comparadores e sou meio viciado em espaguete

    até mais e sucesso

  2. #2
    thinBasic author ErosOlmi's Avatar
    Join Date
    Sep 2004
    Location
    Milan - Italy
    Age
    57
    Posts
    8,777
    Rep Power
    10
    Ciao Eduardo,

    I too hate {} and ; and I suppose we are not alone

    thinBasic has bitwise operators ANDB, ORB, XOR.
    It has also some other functions working on bit like:
    • left and right bit shifting << and >>
    • BIT and BIT_GET used to get a particular bit in a LONG variable
    • BIT_RESET to set to zero a specific bit
    • BIT_SET to to set to 1 a specific bit
    • BIT_TOGGLE to toggles a specific bit


    All those functions are described in thinBasic Help

    You VBA example in thinBasic is very similar, you have to just change "number" to something like "lnumber" (in thinBasic number is a primitive data type, an alias for Extended numeric) and use ANDB and ORB for bit operations:
    Function Bit_Count(ByVal lnumber As Long) As Long
         Dim Aa As Long
         Do While lnumber
              lnumber = andb(lnumber, (lnumber - 1))
              Aa = Aa + 1
         Loop
    
    
         Bit_Count = Aa
    End Function
    
    
    Function Bit_AND_Bit(ByVal Bit1 As Long, ByVal Bit2 As Long) As Long
         Bit_AND_Bit = andb(Bit1, Bit2)
    End Function
    
    
    Function Bit_OR_Bit(ByVal Bit1 As Long, ByVal Bit2 As Long) As Long
         Bit_OR_Bit = orb(Bit1, Bit2)
    End Function
    
    
    Function Bit_XOR_Bit(ByVal Bit1 As Long, ByVal Bit2 As Long) As Long
         Bit_XOR_Bit = Bit1 Xor Bit2
    End Function
    
    If you can give us a complete example on how you think to use such functions and a result example I can see if thinBasic can do the job you need.

    Ciao
    Eros
    www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
    Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000

  3. #3
    Google translation**

    Hello
    thanks for listening

    Although I was not a gambler, I was involved in the study of lotteries "only in the study, I do not have money to bet"
    Bitwise operators are great for filtering and comparisons, if you have many other uses
    kind,
    Here in Brazil we have a lottery that is, from 1 to 25, and has to choose 15 dozen, in which case the 32bit works

    Of course, it is not necessary to say how operators would be used for such a case when one speaks of billions of interactions
    Had even mounted some functions to assist as test,
    as
    HTML Code:
    Function resutToLong(rang As Range, Optional valmax As Long) As Double
         arrayval = rang.Value2
         l1 = UBound(arrayval, 1)
         c1 = UBound(arrayval, 2)
         Dim arbit As Double
         If valmax = 0 Then
              For c = 1 To c1
                   If valmax < arrayval(1, c) Then valmax = arrayval(1, c)
              Next
         End If
         ReDim arbit0(1 To valmax) As Long
         For c = 1 To c1
              arbit0(arrayval(1, c)) = 1
         Next
         For c = 0 To valmax - 1
              arbit = arbit + arbit0(valmax - c) * (2 ^ c)
         Next
         resutToLong = arbit
    End Function
    
    
    Function bintoresut2(bitLong As Double, valmax As Long)
       Dim resut As String
              bin = Dec2Bin(bitLong, valmax)
              For c = 1 To valmax
                   If Mid(bin, c, 1) = 1 Then resut = resut & "," & c
              Next
         bintoresut2 = resut
    End Function
    
    Sub sdfaf()
    MsgBox bintoresut2(5090991 Xor 8238286, 25)
    End Sub
    
    
    'esse peguei por aí
    Function Dec2Bin(ByVal DecimalIn As Variant, Optional NumberOfBits As Variant) As String
         Dec2Bin = ""
         DecimalIn = Int(CDec(DecimalIn))
         Do While DecimalIn <> 0
              Dec2Bin = Format$(DecimalIn - 2 * Int(DecimalIn / 2)) & Dec2Bin
              DecimalIn = Int(DecimalIn / 2)
         Loop
         If Not IsMissing(NumberOfBits) Then
              If Len(Dec2Bin) > NumberOfBits Then
                   Dec2Bin = "Error - Number exceeds specified bit size"
              Else
                   Dec2Bin = Right$(String$(NumberOfBits, "0") & Dec2Bin, NumberOfBits)
              End If
         End If
    End Function
    But I do not like to study this lottery, and I like to put things together that work for anybody, so I dropped it for a while
    We have lotteries ranging from 1 to 100, then only with operators capable of using 128bit
    I know that processors already have this capability and 128bit countbit some video cards already provide instructions
    Https://msdn.microsoft.com/en-us/lib...(v=vs.90).aspx

    Until I found assembly codes embedded in c ++ functions, but I'm a bit slow to pick up the thing
    In a way they are just things I enjoy playing, as long as it does not bring stress

    It should be easy to carry my codes, for which I practically use only "for next, if then and arrays and a few GOTOs, sometimes some gosub when there are many loops lined up, then I remove them

  4. #4
    Hello
    After much reading, I found the help part of the functions
    As far as thinbasic is concerned, I think I can
    But I did not find goto or gosub, I know there is a public hatred for these jump commands
    But I'm not too smart to ride the things I want without it
        For l = LxO To 1 Step -1
            If ResulFolm(l, 1) <> 2 Then
                For C2 = c2x To Cfco
                    v = Comand(C2)
                    For c = Cid To Cfd
                        dd = Array_valor(l, c)
                        Call Convert_tipo(dd, Tipo, v)
                        If v = dd Then GoTo pula_Ev
                    Next
                    ResulFolm(l, 1) = 2    'false
                    GoTo pula_Ef
    pula_Ev:
                Next
                ResulFolm(l, 1) = 1    'True
            End If
    pula_Ef:
        Next
    
    
    Function Forma_Lista(lista As Variant, ByVal linha As Long) As Variant
         Dim C As Long, tem As Boolean, Llt As Long, l As Long
         Llt = UBound(lista, 1)
         l = 20
    Le_Lista:
         cis = Split(lista(linha, 1), ";")
         tem = False
         For C = 0 To UBound(cis)
    testnovo:
              If IsNumeric(cis(C)) Then
                   D = Split(lista(cis(C), 1), ";")
                   If UBound(D) > 0 Then
                        '           e = cis(C)
                        cis(C) = lista(cis(C), 1)
                        D = Split(cis(C), ";")
                        '    lista(e, 1) = ""
                        If UBound(D) > 0 Then tem = True
                   Else
                        cis(C) = D(0)
                        GoTo testnovo
                   End If
              End If
              '          Cells(l, 20).Value2 = Join(cis, ";")
              l = l + 1
              If l > 1000 Then End
              '        Debug.Print Join(cis, ";")
         Next
    
         If tem Then linha = Llt: lista(linha, 1) = Join(cis, ";"): GoTo Le_Lista
         Forma_Lista = cis
    End Function
    
    The functions posted earlier are to transform combinations into decimal and decimal in combination
    1,2,25> 25165825
    25165825>1,2,25
    So comparisons can be made without the loops on top of each value
    I also have to value csn
    Function cobinaçãoCSN(combinação As Range, valor_max)
         If IsArray(combinação) Then
              arr = combinação.Value2
              c = UBound(arr, 2)
              If UBound(arr, 1) > 1 Then cobinaçãoCSN = "apenas uma linha por combinação": Exit Function
              Dim i As Long
              Dim b As Double, dd As Double
    
    
              b = 1
              For i = 0 To c - 1
                   b = b * (valor_max - i) / (c - i)
              Next
              dd = b
              c3 = c
              For cc = 1 To c3
                   n = valor_max - arr(1, cc)
                   b = 1
                   For i = 0 To c - 1
                        b = b * (n - i) / (c - i)
                   Next
                   c = c - 1
                   dd = dd - b
              Next
              cobinaçãoCSN = dd
         End If
    End Function
    
    to use in excel
    = cobinaçãoCSN(G13: I13; 100)
    = cobinaçãoCSN(combination range 1 line only, maximum value)

    I also have for the csn to combine, despite having to put error handling


    Can you tell me if there is any function that allows variables to be used by the string?
    varAux="Variable" & "name"
    stringVAR(varAux)=10
    var2=stringVAR(varAux)
    
    Eduardo

  5. #5
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Hi Eduardo,

    variable names by string sound like a case for dictionary.

    uses "console", "dictionary"
    
    
    dim values as new cDictionary(1024) ' -- Pre-allocated storage for 1024 named values, but you can have more
    
    
    string key = "My" + "Value"
    values.Add(key, 5) ' -- Sets initial value
    values.Add(key, 500) ' -- Overrides 5 to 500
    values.Add("YourValue", 42)
           
    printl key + " = " + values.Find(key)
    printl "YourValue = " + values.Find("YourValue")
    waitkey
    


    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  6. #6
    Happy New Year to all.

    Hi Petr
    I imagined that it would not,
    I already tried to mount a function to use the variable pointer
    But I think because of the scope does not work, would have to know is arranged this.
    And I'm just a curious
    I only mount small functions that have many loops and checks, so
    Using pointers or dictionaries within one's own codes would not

    Had talked about "thinBasic help Online"
    Has to stay as a menu, not sub menu of the forum, for beginners and those who visit the page
    It took me a long time to find
    I believe that for those who visit and use translators it seems that it is to ask for help from someone

    It could be something like
    "ThinBasic Manual"
    "ThinBasic Functions and Instructions"
    "ThinBasic tutorial"

    Eduardo

    Feliz ano novo para todos

    oi Petr
    imaginei que não teria,
    já tentei montar uma função para usar o ponteiro da variavel
    mas creio que por causa do escopo não funciona, teria que saber é organizado isso.
    e tbm sou apenas um curioso
    eu só monto pequenas funções que tem muitos loops e verificações, então
    usar ponteiros ou dicionários dentro dos proprios códigos não traria benefícios


    tinha falado sobre "thinBasic help Online"
    tem que ficar como um menu, e não sub menu do forum, para os iniciantes e os que visitam a pagina
    levei um tempão para achar
    creio que para os que visitam e usam tradutores fica parecendo que é para pedir ajuda de alguem

    podia ser algo como

    thinBasic Manual
    "thinBasic Funções e instruções"
    thinBasic tutorial
    Last edited by Edcronos; 31-12-2016 at 23:02.

  7. #7
    In PHP there is a type of dynamic variable
    Is it a camouflaged dictionary?

    PHP Code:
    //campos do formulario
    //form fields
    $campos_formulario = array("nome""email""ddd""telefone");

    //gera as variaveis dinamicamente
    //generates variables dynamically 

    foreach($campos_formulario as $campo){
        $
    $campo $_POST[$campo];

    A feature of this is very useful
    Is it difficult to implement?

  8. #8
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Eduardo,

    my apologies, but I am not sure I understand.
    What do you find problematic regarding the dictionary module please? If I understand correctly, it should do the same for you.

    What you are requesting is a syntactic sugar. Would be possible to do, but I wonder why do you need 1:1 syntax with PHP?

    Instead of:
    x = variable["key"]
    
    you use this in TB:
    x = variable.Find("key")
    

    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  9. #9
    I'm sorry
    Are two different variants although I mistakenly put as a single question
    In the case of variable variables of php a new variable is created from the strig value of that first variable
    Even arrays it is possible to increase
    Being very useful for working with tables, or chained values
    I do not know if with the thinbasic dictionary it is possible to implement an array of values with a single key
    I just managed to get the key to a new function that works with the array of values that in turn plays into the idice of several other arrays

    me desculpe
    são duas variantes diferentes apesar de eu erroneamente colocar como uma só pergunta
    no caso das variaveis variaveis do php uma nova variavel é criada a parti do valor strig daquela primeira variavel
    até mesmo matrizes é possivel incrementar
    sendo muito util para trabalhar com tabelas, ou valores encadeados
    não sei se com o dicionario do thinbasic é possivel implrementar uma matriz de valores com uma unica chave
    eu somente consegui levando a chave pra uma nova função que trabalha com a matriz de valores que por sua vez joga para o idice de varias outras matrizes

  10. #10
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Hi Edcronos,

    the thinBasic dictionary uses string,string key,value pairs. Thats how it is designed.

    But that does not mean you cannot store array, but sure it implies a bit more work.

    One of the possible approaches:
    uses "console", "dictionary"
    
    dword myDict = dictionary_create(1024) ' -- Preallocated for 1024 items, but more can be specified
    
    dictionary_add(myDict, "values", "uno,dos,tres,quatro")
    
    string values()
    parse(dictionary_find(myDict, "values"), values, ",") 
    
    long i
    
    for i = 1 to countOf(values)
      printl values(i)
    next
    
    waitkey
    
    ...and here version for dictionary object:
    uses "console", "dictionary"
    
    dim myDict as new cDictionary(1024) ' -- Preallocated for 1024 items, but more can be specified
    
    myDict.add("values", "uno,dos,tres,quatro")
    
    string values()
    parse(myDict.Find("values"), values, ",") 
    
    long i
    
    for i = 1 to countOf(values)
      printl values(i)
    next
    
    waitkey
    

    Petr
    Last edited by Petr Schreiber; 22-01-2017 at 17:46.
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

Similar Threads

  1. decimal <--> binary
    By danbaron in forum Science
    Replies: 0
    Last Post: 31-05-2011, 07:33
  2. Binary Data
    By Michael Clease in forum thinBasic General
    Replies: 20
    Last Post: 12-06-2008, 09:02
  3. Binary Files
    By Michael Clease in forum thinBasic General
    Replies: 3
    Last Post: 23-05-2007, 14:20
  4. getting info from binary file
    By sandyrepope in forum Console
    Replies: 4
    Last Post: 16-02-2007, 20:32

Members who have read this thread: 0

There are no members to list at the moment.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •