Difference between revisions of "Operator"
From SimsWiki
(→List: Added explanations and examples for every operator; this should be particularly useful for obscure ones like abs(rhs) or mod=) |
|||
| Line 1: | Line 1: | ||
These are the operators available for use in the [[Expression]] primitive. | These are the operators available for use in the [[Expression]] primitive. | ||
| + | |||
| + | The Operator is byte 6 in the [[Expression]] Primitive and describes which mathematical operation is to be performed. | ||
| + | |||
| + | In the following explanation of what each operator does exactly, LHS stands for left-hand side, meaning the value or variable on the left side of the equation; and RHS stands for right-hand side, meaning the value or variable on the right side of the equation. | ||
==List== | ==List== | ||
| Line 6: | Line 10: | ||
! Hex | ! Hex | ||
! Meaning | ! Meaning | ||
| + | ! Explanation | ||
| + | ! Example | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
| > | | > | ||
| + | | Check if LHS is greater than RHS | ||
| + | | Literal 13 > Literal 6, Result: True | ||
|- | |- | ||
| 0x01 | | 0x01 | ||
| < | | < | ||
| + | | Check if LHS is smaller than RHS | ||
| + | | Literal 13 < Literal 6, Result: False | ||
|- | |- | ||
| 0x02 | | 0x02 | ||
| == | | == | ||
| + | | Check if LHS equals RHS | ||
| + | | Literal 13 == Literal 6, Result: False | ||
|- | |- | ||
| 0x03 | | 0x03 | ||
| += | | += | ||
| + | | Add RHS value to LHS | ||
| + | | Literal 13 += Literal 6, Result: 19 | ||
|- | |- | ||
| 0x04 | | 0x04 | ||
| -= | | -= | ||
| + | | Subtract RHS value from LHS | ||
| + | | Literal 13 -= Literal 6, Result: 7 | ||
|- | |- | ||
| 0x05 | | 0x05 | ||
| := | | := | ||
| + | | Assign RHS value to LHS | ||
| + | | Local 0 := Literal 6 -> Local 0 now carries the value 6 | ||
|- | |- | ||
| 0x06 | | 0x06 | ||
| *= | | *= | ||
| + | | Multiply LHS by RHS | ||
| + | | Literal 13 *= Literal 6, Result: 78 | ||
|- | |- | ||
| 0x07 | | 0x07 | ||
| /= | | /= | ||
| + | | Divide LHS by RHS. The result is '''truncated''', meaning any fractional decimals are ignored. | ||
| + | | Literal 13 /= Literal 6, Result: 2 | ||
|- | |- | ||
| 0x08 | | 0x08 | ||
| Flag Set? | | Flag Set? | ||
| + | | Check if the bit flag defined by RHS is set pn LHS | ||
| + | | Literal 13 Flag Set? flag# Literal 3, Result: True (13 is 00001101 in binary) | ||
|- | |- | ||
| 0x09 | | 0x09 | ||
| Set Flag | | Set Flag | ||
| + | | Set the bit flag defined by RHS on LHS to 1 | ||
| + | | Assume Local 0 is currently 0, then: Local 0 Set Flag flag# Literal 3 -> Local 0 now carries the value 4 (00000100) | ||
|- | |- | ||
| 0x0A | | 0x0A | ||
| Clear Flag | | Clear Flag | ||
| + | | Set the bit flag defined by RHS on LHS to 0 | ||
| + | | Assume Local 0 is currently 4, then: Local 0 Clear Flag flag# Literal 3 -> Local 0 now carries the value 0 (00000000) | ||
|- | |- | ||
| 0x0B | | 0x0B | ||
| ++ and < | | ++ and < | ||
| + | | Add 1 to LHS value, then compare if LHS is still smaller than RHS | ||
| + | | Assume Local 0 is currently 4, then: Local 0 ++ and < Literal 5 -> Local 0 is now 5 and the function returns False. | ||
|- | |- | ||
| 0x0C | | 0x0C | ||
| mod= | | mod= | ||
| + | | Divide LHS by RHS but return the modulo (the remainder of the division) instead | ||
| + | | Literal 13 mod= Literal 6, Result: 1 | ||
|- | |- | ||
| 0x0D | | 0x0D | ||
| and= | | and= | ||
| + | | The result is the value that represents which bits are set to 1 on both LHS and RHS | ||
| + | | Literal 158 and= Literal 29, Result: 28 (10011110 and= 00011101 = 00011100) | ||
|- | |- | ||
| 0x0E | | 0x0E | ||
| >= | | >= | ||
| + | | Check if LHS is greater than or equals RHS | ||
| + | | Literal 13 >= Literal 6, Result: True | ||
|- | |- | ||
| 0x0F | | 0x0F | ||
| <= | | <= | ||
| + | | Check if LHS is smaller than or equals RHS | ||
| + | | Literal 13 <= Literal 6, Result: False | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| != | | != | ||
| + | | Check if LHS does not equal RHS. This returns the exact opposite result of the == operator. | ||
| + | | Literal 13 != Literal 6, Result: True | ||
|- | |- | ||
| 0x11 | | 0x11 | ||
| -- and > | | -- and > | ||
| + | | Subtract 1 from LHS value, then compare if LHS is still greater than RHS | ||
| + | | Assume Local 0 is currently 8, then: Local 0 -- and > Literal 5 -> Local 0 is now 7 and the function returns True. | ||
|- | |- | ||
| 0x12 | | 0x12 | ||
| or= | | or= | ||
| + | | The result is the value that represents which bits are set to 1 on either LHS and RHS | ||
| + | | Literal 158 or= Literal 29, Result: 159 (10011110 or= 00011101 = 10011111) | ||
|- | |- | ||
| 0x13 | | 0x13 | ||
| xor= | | xor= | ||
| + | | The result is the value that represents which bits have the same state (0 or 1) on both LHS and RHS | ||
| + | | Literal 158 xor= Literal 29, Result: 124 (10011110 xor= 00011101 = 01111100) | ||
|- | |- | ||
| 0x14 | | 0x14 | ||
| − | | abs | + | | abs(rhs) |
| + | | The result is the absolute value of RHS, meaning any negative numbers become positive, and positive numbers stay positive. | ||
| + | | Local 0 abs(rhs) Literal -4, Result: 4 | ||
|- | |- | ||
| 0x15 | | 0x15 | ||
| Assign 32bit Value | | Assign 32bit Value | ||
| + | | Set LHS to the first half of a 32-bit integer represented by RHS and RHS+1, with LHS+1 receiving the second half of the 32-bit integer. This one only has very specific use cases (e.g. to write a job's GUID into a Sim's Person Data). | ||
| + | | My person data 0x006B Assign 32bit Value Temp 0 -> My person data 0x006B is set to Temp 0, and My person data 0x006C is set to Temp 1 | ||
|} | |} | ||
Revision as of 01:23, 1 August 2026
These are the operators available for use in the Expression primitive.
The Operator is byte 6 in the Expression Primitive and describes which mathematical operation is to be performed.
In the following explanation of what each operator does exactly, LHS stands for left-hand side, meaning the value or variable on the left side of the equation; and RHS stands for right-hand side, meaning the value or variable on the right side of the equation.
List
| Hex | Meaning | Explanation | Example |
|---|---|---|---|
| 0x00 | > | Check if LHS is greater than RHS | Literal 13 > Literal 6, Result: True |
| 0x01 | < | Check if LHS is smaller than RHS | Literal 13 < Literal 6, Result: False |
| 0x02 | == | Check if LHS equals RHS | Literal 13 == Literal 6, Result: False |
| 0x03 | += | Add RHS value to LHS | Literal 13 += Literal 6, Result: 19 |
| 0x04 | -= | Subtract RHS value from LHS | Literal 13 -= Literal 6, Result: 7 |
| 0x05 | := | Assign RHS value to LHS | Local 0 := Literal 6 -> Local 0 now carries the value 6 |
| 0x06 | *= | Multiply LHS by RHS | Literal 13 *= Literal 6, Result: 78 |
| 0x07 | /= | Divide LHS by RHS. The result is truncated, meaning any fractional decimals are ignored. | Literal 13 /= Literal 6, Result: 2 |
| 0x08 | Flag Set? | Check if the bit flag defined by RHS is set pn LHS | Literal 13 Flag Set? flag# Literal 3, Result: True (13 is 00001101 in binary) |
| 0x09 | Set Flag | Set the bit flag defined by RHS on LHS to 1 | Assume Local 0 is currently 0, then: Local 0 Set Flag flag# Literal 3 -> Local 0 now carries the value 4 (00000100) |
| 0x0A | Clear Flag | Set the bit flag defined by RHS on LHS to 0 | Assume Local 0 is currently 4, then: Local 0 Clear Flag flag# Literal 3 -> Local 0 now carries the value 0 (00000000) |
| 0x0B | ++ and < | Add 1 to LHS value, then compare if LHS is still smaller than RHS | Assume Local 0 is currently 4, then: Local 0 ++ and < Literal 5 -> Local 0 is now 5 and the function returns False. |
| 0x0C | mod= | Divide LHS by RHS but return the modulo (the remainder of the division) instead | Literal 13 mod= Literal 6, Result: 1 |
| 0x0D | and= | The result is the value that represents which bits are set to 1 on both LHS and RHS | Literal 158 and= Literal 29, Result: 28 (10011110 and= 00011101 = 00011100) |
| 0x0E | >= | Check if LHS is greater than or equals RHS | Literal 13 >= Literal 6, Result: True |
| 0x0F | <= | Check if LHS is smaller than or equals RHS | Literal 13 <= Literal 6, Result: False |
| 0x10 | != | Check if LHS does not equal RHS. This returns the exact opposite result of the == operator. | Literal 13 != Literal 6, Result: True |
| 0x11 | -- and > | Subtract 1 from LHS value, then compare if LHS is still greater than RHS | Assume Local 0 is currently 8, then: Local 0 -- and > Literal 5 -> Local 0 is now 7 and the function returns True. |
| 0x12 | or= | The result is the value that represents which bits are set to 1 on either LHS and RHS | Literal 158 or= Literal 29, Result: 159 (10011110 or= 00011101 = 10011111) |
| 0x13 | xor= | The result is the value that represents which bits have the same state (0 or 1) on both LHS and RHS | Literal 158 xor= Literal 29, Result: 124 (10011110 xor= 00011101 = 01111100) |
| 0x14 | abs(rhs) | The result is the absolute value of RHS, meaning any negative numbers become positive, and positive numbers stay positive. | Local 0 abs(rhs) Literal -4, Result: 4 |
| 0x15 | Assign 32bit Value | Set LHS to the first half of a 32-bit integer represented by RHS and RHS+1, with LHS+1 receiving the second half of the 32-bit integer. This one only has very specific use cases (e.g. to write a job's GUID into a Sim's Person Data). | My person data 0x006B Assign 32bit Value Temp 0 -> My person data 0x006B is set to Temp 0, and My person data 0x006C is set to Temp 1 |
See Also
This article is imported from the old MTS2 wiki. It's original page, with comments, can be found at http://old_wiki.modthesims2.com/Operator