## eCalculator  ```                            Basic Operations:
Input expression, press ENTER or click the C button.
Press ESC to clear the input text.
Press UP/DOWN to select history input.
Click the result number to put it to input text.

Numbers:
Decimal by default.
Prefix 0b for binary.
Prefix 0x for hex.
Underscore _ can be in a number ( exp. 10_000 ).

Strings:
Single/double quoted like 'abc' "str"
Use "\" to escape special characters, like
\'	single quotation mark
\"	double quotation mark
\\	reverse solidus
\/	solidus
\n	newline
\t	horizontal tab
\u????	4 hex digits to represent a unicode char.
\b	*backspace
\f	*formfeed
\r	*carriage return

* Those characters are not displayed in the screen.
NOTE
Actually it uses JSON's string format with additional "\'".
You must follow its syntax or get an error.

Currently supported operators
Basic:
+ : Plus (+)
- : Minus (−)
* : Times (×)
/ : Divide (÷)
% : Module
Extanded:
** : Power
// : Integer Divide
*/ : N-Power's Root: a */ b == a ** (1/b)
Bitwise (integers only):
~ : Bitwise NOT
& : Bitwise AND
| : Bitwise OR
^ : Bitwise XOR
Logical (true = 1, false = 0):
! : Logical NOT
&& : Logical  AND
|| : Logical  OR
Relational (true = 1, false = 0):
== : Equal
!= : Not equal
> : Greater than
< : Less than
>= : Greater than or Equal to
<= : Less than or Equal to
Quest (lazy version):
condition ? true value : false value
for exp.
1 >= 2 ? 10 : 20  =>  20
1 ? 2 ? 3 : 4 : 5 ? 6 : 7  =  1 ? (2 ? 3 : 4) : (5 ? 6 : 7)
Operator Orders
Use ( and ) to promote orders.
1	** */
2	* / % //
3	+ -
4	~ & | ^
5	! && ||
6	== != > < >= <=
7	? :
Variable, Constants and Functions
Assign Variable:
=	a = ...
a = b = 3	=>	a = (b = 3)
a = 1 + (b = 2)	=> a = 3, b = 2
[*] A variable could be assigned to a function.
Constants:
E:	2.7182818...
PI:	3.1415926...
Functions:
abs:	absolute value
ln:	log based on E
lg lg10 log10:	log based on 10
lg2 log2:	log based on 2
log:	log(number, base)
sin, cos, tan/tg, ctan/ctg:	Triangle functions
ord/chr:	convert between char and code.
signed/unsigned:	convert interger to signed/unsigned.
Infix/Postfix Notation
Infix (shortcut Ctrl+I):
#{IN: 1+2}
#{IN: 9*8-7/6}
Postfix (shortcut Ctrl+R):
#{RPN: 1 2 +}
#{RPN: 9 8 * 7 6 / -}
Mix up:
#{RPN: 1 #{IN: 2+3} +}
#{IN: 2+#{RPN: 9 8 * 7 6 / -}}
Postfix Notation Syntax
Operators:
Unary:
~	#{RPN: 1 ~}
!	#{RPN: 0 !}
Not supported for conflict reason:
+	-
( Should use 0 and binary operators like #{RPN: 0 1 -} )

Binary:
All supported. e.g.
#{IN: 6*7+8/(9-5)} equals to #{RPN: 6 7 * 8 9 5 - / +}

Trinary:
#{IN: a ? b : c} equals to #{RPN: a b c ?} . No colon(:)
Whitespaces and Commas
Whitespaces are not necessary while no conflict. For ins.,
#{RPN: 6 7 * 8 9 5 - / +} could be #{RPN:6 7*8 9 5-/+}

Comma(,)s are ignored in RPN mode. So you can use them instead of whitespaces. For exp.,
#{RPN:6 7*8 9 5-/+} could be #{RPN:6,7*,8,9 5,-,/,,+}
Function call:
fn(args...) equals to (args... fn), but no comma(,)s joined into the arguments.

e.g.
#{IN: log(n, b) } equals to #{RPN: ( n b log ) }
#{IN: ord(c)} equals to #{RPN: (c ord) }
#{IN: log(8**4, 6-2)} equals to #{RPN:(8 4**,6 2-,log)}
```

## 扩展迷QQ交流群    