Jump to content

negetive add and subtract by using bit*


netegg
 Share

Recommended Posts

Have a look here: http://en.wikipedia.org/wiki/Binary_numeral_system

Use e.g. the highest bit to represent negative values.

16-bit:

0 000 0000 0000 0001 = 1

1 000 0000 0000 0001 = -1

Br,

UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Thanks, uez,

This is my question. I've tried it two days, but can't I get a better solution.

a checkbox followed by group of radios, when unchecked checkbox, disable the radios,and enable when checked. Here is my code.

#include <GUIConstantsEx.au3>
Example()
Func Example()
   Local $msg, $checkbox[3], $radio[5]
   GUICreate("My GUI Checkbox")
   $checkbox[0] = GUICtrlCreateCheckbox("CHECKBOX 1", 10, 10, 120, 20)
   For $i = 0 To 4
      $radio[$i] = GUICtrlCreateRadio('radio', 10, ($i + 2) * 20, 130.20)
      GUICtrlSetState(-1, $gui_disable)
   Next
   GUISetState()

   While 1
      $msg = GUIGetMsg()
      If $msg = $checkbox[0] Then
        For $i = 0 To 4
          ; GUICtrlSetState($radio[$i], BitShift(GUICtrlRead($checkbox[0]), -5) * (BitAND(GUICtrlRead($checkbox[0]), 1) + 1))
          ; GUICtrlSetState($radio[$i], BitShift(BitShift(GUICtrlRead($checkbox[0]), -5), - BitAND(GUICtrlRead($checkbox[0]), 1)))
           GUICtrlSetState($radio[$i],  BitShift(GUICtrlRead($checkbox[0]), -5-BitAND(GUICtrlRead($checkbox[0]), 1)))
        Next
    EndIf
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
  WEnd
EndFunc   ;==>Example

Pls have a look! I know there're some mistakes, but I can't get it! :)

Edited by netegg
Link to comment
Share on other sites

Here another way to do it:

#include <guiconstantsex.au3>
Global $radio[5]
Example()
Func Example()
   Local $msg, $checkbox[3], $state
   GUICreate("My GUI Checkbox")
   $checkbox[0] = GUICtrlCreateCheckbox("CHECKBOX 1", 10, 10, 120, 20)
   For $i = 0 To 4
      $radio[$i] = GUICtrlCreateRadio('radio', 10, ($i + 2) * 20, 130.20)
      GUICtrlSetState(-1, $gui_disable)
   Next
   GUISetState()

   While 1
      $msg = GUIGetMsg()
      If $msg = $checkbox[0] Then
            $state = BitAND(GUICtrlRead($checkbox[0]), $GUI_CHECKED)
            Switch $state
                Case $GUI_CHECKED
                    SetCtrlState($GUI_ENABLE)
                Case Else
                    SetCtrlState($GUI_DISABLE)
            EndSwitch
    EndIf
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
  WEnd
EndFunc   ;==>Example

Func SetCtrlState($state)
    Local $i
    For $i = 0 To UBound($radio) - 1
        Switch $state
            Case $GUI_ENABLE
                GUICtrlSetState($radio[$i], $GUI_ENABLE)
            Case Else
                GUICtrlSetState($radio[$i], $GUI_DISABLE)
        EndSwitch
    Next
EndFunc

Or with bit operations:

#include <guiconstantsex.au3>
Example()
Func Example()
   Local $msg, $checkbox[3], $radio[5], $state, $new
   GUICreate("My GUI Checkbox")
   $checkbox[0] = GUICtrlCreateCheckbox("CHECKBOX 1", 10, 10, 120, 20)
   For $i = 0 To 4
      $radio[$i] = GUICtrlCreateRadio('radio', 10, ($i + 2) * 20, 130.20)
      GUICtrlSetState(-1, $gui_disable)
   Next
   GUISetState()

   While 1
      $msg = GUIGetMsg()
      If $msg = $checkbox[0] Then
            $state = GUICtrlRead($checkbox[0])
            For $i = 0 To UBound($radio) - 1
                $new = BitShift($GUI_ENABLE, -$state) / (BitShift($state, -1)) ;BitShift($state, -1) ) = $state * 2
                GUICtrlSetState($radio[$i], $new)
            Next
    EndIf
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
  WEnd
EndFunc   ;==>Example

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...