Gamevar operators: Difference between revisions

From EDukeWiki
Jump to navigation Jump to search
slight re-wording; in bitwise ops examples, state that numbers are base-0.
No edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<'''operator'''>'''var''' <gamevar> <value><br>
<span {{code}}> <'''operator'''> <gamevar> <constant|gamevar></span>
<'''operator'''>'''varvar''' <gamevar> <value>


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).
<span {{code}}> <'''operator'''>'''var''' <gamevar> <constant> </span> ''(deprecated)''


For example:
<span {{code}}> <'''operator'''>'''varvar''' <gamevar> <gamevar></span> ''(deprecated)''


  setvar temp 1 // assigns a value of 1 to the gamevar ''temp''.
EDuke32 CON supports a range of binary operators that perform various arithmetic and bitwise logical operations on variables, here denoted as [[gamevar]]s.
 
The syntax is similar to Intel x86 assembly, where the first argument is the destination as well as the first operand (2-address code).
 
In older versions of EDuke32, it was necessary to distinguish between '''var''', and '''varvar''' binary operations. The difference between them is that the singular '''var''' operations expect a gamevar for the first, and a constant value (or label) for the second argument, while the '''varvar''' operations expect gamevars for both arguments.
 
This distinction is no longer required, and one can now write the operator without any '''var''' appendix, and use either constant or variable as the second argument.
 
==== Example ====
 
  var temp 0 0  // initialize a global variable with initial value 0
set temp 1   // assigns a value of 1 to the gamevar ''temp''.
   
   
  addvar temp 1 // adds 1 to ''temp'', causing its value to become 2.
  add 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.
  mul temp 2   // multiplies ''temp'' by 2, causing its value to become 4.
 
== Operators ==


{| {{prettytable}}
{| {{prettytable}}
Line 28: Line 41:
|sub
|sub
|<code><nowiki>-</nowiki></code>
|<code><nowiki>-</nowiki></code>
|<nowiki>&ndash;</nowiki>
|<nowiki>&minus;</nowiki>
|subtraction
|subtraction
|
|
Line 46: Line 59:
|mod
|mod
|<code>%</code>
|<code>%</code>
|
|mod
|[[Wikipedia:Modulo operation|modulo]], remainder
|[[Wikipedia:Modulo operation|modulo]], remainder
|Ensure that <value> does not equal 0 at any time; '''It is undefined whether the sign of the result follows the divisor or the dividend''' (for now). <strike>sign of the result is that of left hand side operand</strike>
|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>
|<code>&</code>
|  
|&#8743;
|[[Wikipedia:Bitwise operation|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. Ex. (all numbers are [[Wikipedia:Binary numeral system|base-2]]):<br/>
|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
01001010 AND<br/>
11110100 is<br/>
01000000
|-
|-
|or
|or
|<code><nowiki>|</nowiki></code>
|<code><nowiki>|</nowiki></code>
|  
|&#8744;
|[[Wikipedia:Bitwise operation|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. Ex.:<br/>
|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
01001010 OR<br/>
11110100 is<br/>
11111110
|-
|-
|xor
|xor
|<code>^</code>
|<code>^</code>
|  
|&#8853;
|[[Wikipedia:Bitwise operation|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. Ex.:<br/>
|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
01001010 XOR<br/>
11110100 is<br/>
10111110
|}
|}
{{varsuffix}}


[[Category:Gamevar manipulation]]
[[Category:Gamevar manipulation]]

Latest revision as of 11:06, 15 December 2024

<operator> <gamevar> <constant|gamevar>

<operator>var <gamevar> <constant> (deprecated)

<operator>varvar <gamevar> <gamevar> (deprecated)

EDuke32 CON supports a range of binary operators that perform various arithmetic and bitwise logical operations on variables, here denoted as gamevars.

The syntax is similar to Intel x86 assembly, where the first argument is the destination as well as the first operand (2-address code).

In older versions of EDuke32, it was necessary to distinguish between var, and varvar binary operations. The difference between them is that the singular var operations expect a gamevar for the first, and a constant value (or label) for the second argument, while the varvar operations expect gamevars for both arguments.

This distinction is no longer required, and one can now write the operator without any var appendix, and use either constant or variable as the second argument.

Example

var temp 0 0  // initialize a global variable with initial value 0

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

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

mul temp 2    // multiplies temp by 2, causing its value to become 4.

Operators

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 % 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