Gamevar operators: Difference between revisions

From EDukeWiki
Jump to navigation Jump to search
No edit summary
No edit summary
(14 intermediate revisions by 4 users not shown)
Line 2: Line 2:
<'''operator'''>'''varvar''' <gamevar> <value>
<'''operator'''>'''varvar''' <gamevar> <value>


Gamevar operators are commands that perform various mathematical operations on [[gamevar]]s.
Gamevar operators are commands that perform various mathematical and bitwise logical operations on [[gamevar]]s. The first argument must be a writable gamevar and is taken as the destination as well and the first operand (2-address code).


For example:
For example:
[[setvar]]
<code>setvar temp 1</code> assigns a value of 1 to the gamevar ''temp''.


<code>addvar temp 1</code> adds 1 to ''temp'', causing its value to become 2.
setvar temp 1 // assigns a value of 1 to the gamevar ''temp''.
 
<code>mulvar temp 2</code> multiplies ''temp'' by 2, causing its value to become 4.
addvar temp 1 // adds 1 to ''temp'', causing its value to become 2.
mulvar temp 2 // multiplies ''temp'' by 2, causing its value to become 4.


{| {{prettytable}}
{| {{prettytable}}
Line 16: Line 16:
|-
|-
|set
|set
|=
|<code>=</code>
|=
|=
|assignment
|assignment
|-
|-
|add
|add
|<nowiki>+</nowiki>
|<code><nowiki>+</nowiki></code>
|<nowiki>+</nowiki>
|<nowiki>+</nowiki>
|addition
|addition
Line 27: Line 27:
|-
|-
|sub
|sub
|<nowiki>-</nowiki>
|<code><nowiki>-</nowiki></code>
|<nowiki>-</nowiki>
|<nowiki>&ndash;</nowiki>
|subtraction
|subtraction
|
|
|-
|-
|mul
|mul
|*
|<code>*</code>
|&times;
|&times;
|multiplication
|multiplication
Line 39: Line 39:
|-
|-
|div
|div
|/
|<code>/</code>
|&#247;
|&#247;
|division
|division with rounding toward 0 for nonnegative dividends
|Ensure that <value> does not equal 0 at any time.
|Ensure that <value> does not equal 0 at any time. '''The rounding behavior is undefined for negative dividends.'''
|-
|-
|mod
|mod
|%
|<code>%</code>
|
|
|[[Wikipedia:Modulo operation|modulo]], remainder
|[[Wikipedia:Modulo operation|modulo]], remainder
|Ensure that <value> does not equal 0 at any time.
|Ensure that <value> does not equal 0 at any time; sign of the result is that of left hand side operand (dividend).
|-
|-
|and
|and
|&
|<code>&</code>
|  
|  
|bitwise AND
|[[Wikipedia:Bitwise operation|bitwise]] AND
|The bits in the result are set only if they were set in both of the values being operated on.
|The bits in the result are set only if they were set in both of the values being operated on. Ex. (all numbers are [[Wikipedia:Binary numeral system|base-2]]): 01001010 AND 11110100 is 01000000
|-
|-
|or
|or
|<nowiki>|</nowiki>
|<code><nowiki>|</nowiki></code>
|  
|  
|bitwise OR
|[[Wikipedia:Bitwise operation|bitwise]] OR
|The bits in the result are set only if they were set in either of the values being operated on.
|The bits in the result are set only if they were set in either of the values being operated on. Ex.: 01001010 OR 11110100 is 11111110
|-
|-
|xor
|xor
|^
|<code>^</code>
|  
|  
|bitwise XOR
|[[Wikipedia:Bitwise operation|bitwise]] XOR
|The bits in the result are set if only one of the values being operated on has those bits set.
|The bits in the result are set if only one of the values being operated on has those bits set. Ex.: 01001010 XOR 11110100 is 10111110
|}
|}



Revision as of 13:21, 8 March 2015

<operator>var <gamevar> <value>
<operator>varvar <gamevar> <value>

Gamevar operators are commands that perform various mathematical and bitwise logical operations on gamevars. The first argument must be a writable gamevar and is taken as the destination as well and the first operand (2-address code).

For example:

setvar temp 1 // assigns a value of 1 to the gamevar temp.

addvar temp 1 // adds 1 to temp, causing its value to become 2.

mulvar temp 2 // multiplies temp by 2, causing its value to become 4.
Operator C/C++ Math Description Notes
set = = assignment
add + + addition
sub - subtraction
mul * × multiplication
div / ÷ division with rounding toward 0 for nonnegative dividends Ensure that <value> does not equal 0 at any time. The rounding behavior is undefined for negative dividends.
mod % modulo, remainder Ensure that <value> does not equal 0 at any time; sign of the result is that of left hand side operand (dividend).
and & bitwise AND The bits in the result are set only if they were set in both of the values being operated on. Ex. (all numbers are base-2): 01001010 AND 11110100 is 01000000
or | bitwise OR The bits in the result are set only if they were set in either of the values being operated on. Ex.: 01001010 OR 11110100 is 11111110
xor ^ bitwise XOR The bits in the result are set if only one of the values being operated on has those bits set. Ex.: 01001010 XOR 11110100 is 10111110

Commands with an additional "var" suffix take gamevars rather than constants or defined labels for their inputs. As an alternate short form, "varvar" can be dropped from these commands; for example ife serves an an alias for ifvarvare.