运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作. F#内置运算符丰富,提供以下类型的运算符 :
算术运算符
比较运算符
布尔运算符
按位运算符
下表显示了F#语言支持的所有算术运算符.假设变量A保持10,变量B保持20:
运算符 | 描述 | 示例 |
---|---|---|
+ | 添加两个操作数 | A + B将给出30 |
- | 从第一个减去第二个操作数 | A - B将给-10 |
* | 将两个操作数相乘 | A * B将给出200 |
/ | 将分子除以除分子 | B/A将给出2 |
% | 模数运算符和整数后的余数分部 | B%A将给0 |
** | Exponentiation运算符,将操作数提升到另一个的力量 | B ** A将给出20 10 |
下表显示了F#语言支持的所有比较运算符.这些二进制比较运算符可用于整数和浮点类型.这些运算符返回bool类型的值.
假设变量A保持10,变量B保持20:
运算符 | 描述 | 示例 |
---|---|---|
= | 检查两个操作数的值是否相等,如果是,则条件变为真. | (A == B)不成立. |
<> | 检查两个操作数的值是否相等,如果值不相等则条件变为真. | (A<> B)为真. |
> | 检查左操作数的值是否大于值右操作数,如果是,则条件变为真. | (A> B)不成立. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件变为真. | (A< B)是真的. |
> = | 检查价值是否为左操作数大于或等于右操作数的值,如果是,则条件变为真. | (A> = B)不成立. |
< = | 检查左操作数的值是否小于或等于右边的值操作数,如果是则则条件变为真. | (A< = B)为真. |
下表显示了F#语言支持的所有布尔运算符.假设变量A保持真而变量B保持假:
运算符 | 描述 | 示例 |
---|---|---|
&& | 被称为布尔运算符.如果两个操作数都不为零,则条件变为真. | (A&& B)为假. |
|| | 被称为布尔运算符.如果两个操作数中的任何一个非零,则条件变为真. | (A || B)为真. |
不 | 被称为布尔非运算符.用于反转其操作数的逻辑状态.如果条件为真,那么Logical NOT运算符将为false. | not(A&& B)为真. |
按位运算符处理位并执行逐位运算. &&& amp;的真值表(按位AND),||| (按位OR),^^^(按位异或)如下&&;
p | q | p&&& q | p ||| q | p ^^^ q |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设A = 60;和B = 13;现在采用二进制格式,它们将如下所示;
A = 0011 1100
B = 0000 1101
- ----------------
A&&& B = 0000 1100
A ||| B = 0011 1101
A ^^^ B = 0011 0001
~~~ A = 1100 0011
下表列出了F#语言支持的Bitwise运算符.假设变量A保持60,变量B保持13:
运算符 | 描述 | 示例 |
---|---|---|
&&& | 如果两个操作数都存在,二进制AND运算符会将结果复制到结果中. | (A&&& B)将给出12,即0000 1100 |
||| | 如果二进制OR运算符存在于任一操作数中,则复制一位. | (A ||| B)将给出61,即0011 1101 |
^^^ | 二进制XOR运算符如果在一个操作数中设置,则不会同时复制该位. | (A ^^^ B)将给出49,这是0011 0001 |
~~ 〜 | Binary Ones补充运算符是一元的,具有"翻转"位的效果. | (~~~ A)将给出-61,以2的补码形式为1100 0011. |
<<<< | 二进制左移运算符.左操作数值向左移动右操作数指定的位数. | A<<< 2将给出240这是1111 0000 |
>>> | 二进制右移运算符.左操作数值向右移动右操作数指定的位数. | A>>> 2将给出15,即0000 1111 |
以下表显示了F#语言中运算符和其他表达式关键字的优先顺序,从最低优先级到最高优先级.
Operator | Associativity |
---|---|
as | Right |
when | Right |
| (pipe) | Left |
; | Right |
let | Non associative |
function, fun, match, try | Non associative |
if | Non associative |
→ | Right |
:= | Right |
, | Non associative |
or, || | Left |
&, && | Left |
< op, >op, =, |op, &op | Left |
&&& , |||, ^^^, ~~~, <<<, >>> | Left |
^ op | Right |
:: | Right |
:?>, :? | Non associative |
- op, +op, (binary) | Left |
* op, /op, %op | Left |
** op | Right |
f x (function application) | Left |
| (pattern match) | Right |
prefix operators (+op, -op, %, %%, &, &&, !op, ~op) | Left |
. | Left |
f(x) | Left |
f<types> | Left |