初识Tcl(三):Tcl 变量及运算符
目录
Tcl变量
变量命名
动态类型
数学表达式
TCL运算符
算术运算符
关系运算符
逻辑运算符
位运算符
三元运算符
Tcl运算符优先级
Tcl算术运算符
例子
Tcl关系运算符
例子
Tcl逻辑运算符
示例
Tcl位运算符
示例
Tcl三元运算符
示例
Tcl运算符优先级
示例
Tcl变量
在TCL,变量声明没有概念。当遇到一个新的变量名,TCL将定义一个新的变量。
变量命名
变量的名称可以包含任何字符和长度。甚至可以存在空格被封闭在大括号中的变量,但不建议这样做。
set命令用于指定值的变量。set 命令的语法是:
set variableName value
变量的几个例子如下所示。
#!/usr/bin/tclshset variableA 10
set {variable B} test
puts $variableA
puts ${variable B}
当上述代码被执行时,它会产生以下结果。
10
test
正如可以在上面的方案看到,$variableName 用于获取变量的值。
动态类型
TCL是一种动态类型语言。变量的值可以在需要时被动态地转换为所需的类型。例如,一个数字5,其被存储为字符串将做的算术运算时被转换为数字。它如下所示。
#!/usr/bin/tclshset variableA "10"
puts $variableA
set sum [expr $variableA +20];
puts $sum
当上述代码被执行时,它会产生以下结果。
10
30
数学表达式
正如在上面的例子中看到,expr是用于表示数学表达式。 Tcl默认精度为12位。为了得到浮点运算的结果,我们应该增加至少一个十进制数字。一个简单的例子说明了上述情况。
#!/usr/bin/tclshset variableA "10"
set result [expr $variableA / 9];
puts $result
set result [expr $variableA / 9.0];
puts $result
set variableA "10.0"
set result [expr $variableA / 9];
puts $result
当上述代码被执行时,它会产生以下结果。
1
1.1111111111111112
1.1111111111111112
在上面的例子中,可以看到三种情况。第一种情况,被除数和除数是整数,得到一个整数作为结果。第二种情况,除数是小数以及第三种情况,分数是一个十进制数。在第二和第三情况下,得到的是十进制数作的结果。
在上面的代码,可以使用tcl_precision特殊变量改变精度。它如下所示。
#!/usr/bin/tclshset variableA "10"
set tcl_precision 5
set result [expr $variableA / 9.0];
puts $result
当上述代码被执行时,它会产生以下结果。
1.1111
TCL运算符
运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 Tcl语言有丰富的内置运算符,运算符提供的以下几种类型:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 三元运算符
本教程将一个一个地来解释算术,关系,逻辑,位及其他运算符。
算术运算符
下表列出了所有Tcl语言支持的算术运算符。假设变量A=10,变量B=20,则:
算术运算实例
运算符 | 描述 | 实例 |
---|---|---|
+ | 两个操作数相加 | A + B = 30 |
- | 第一个操作数减去第二个操作数 | A - B = -10 |
* | 两个操作数相乘 | A * B = 200 |
/ | 除法分子通过去分母 | B / A = 2 |
% | 模运算及整数除法后的余数 | B % A = 0 |
关系运算符
下表列出了所有Tcl语言支持的关系运算符。假设变量A=10,以及变量B=20,则:
关系运算符例子
操作符 | 描述 | 例子 |
---|---|---|
== | 检查两个操作数的值是否相等,如果是的话那么条件为真。 | (A == B) 不为 true. |
!= | 检查两个操作数的值是否相等,如果值不相等,则条件为真。 | (A != B) 为 true. |
> | 检查左边的操作数的值是否大于右操作数的值,如果是的话那么条件为真。 | (A > B) 不为 true. |
< | 检查左边的操作数的值是否小于右操作数的值,如果是的话那么条件为真。 | (A < B) 为 true. |
>= | 检查左边的操作数的值是否大于或等于右操作数的值,如果是的话那么条件为真。 | (A >= B) 不为 true. |
<= | 检查左边的操作数的值是否小于或等于右操作数的值,如果是的话那么条件为真。 | (A <= B) 为 true. |
逻辑运算符
下表列出了所有Tcl语言支持的逻辑运算符。假设变量A=1和变量B=0,则:
逻辑运算符例子
运算符 | 描述 | 例子 |
---|---|---|
&& | 所谓逻辑与操作。如果两个操作数都非零,则条件变为真。 | (A && B) 为 false. |
|| | 所谓的逻辑或操作。如果任何两个操作数是非零,则条件变为真。 | (A || B) 为 true. |
! | 所谓逻辑非运算符。使用反转操作数的逻辑状态。如果条件为真,那么逻辑非运算符为假。 | !(A && B) 为 true. |
位运算符
位运算符适用于位并进行逐位操作。&, |, 和 ^ 的真值表如下:
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
通过Tcl语言支持位运算符列在下表中。假设变量A=60和变量B=13,则:
位运算符例子
运算符 | 描述 | 例子 |
---|---|---|
& | 二进制和操作符副本位的结果,如果它存在于两个操作数。 | (A & B) = 12, 也就是 0000 1100 |
| | 二进制或操作拷贝位,如果它存在一个操作数中。 | (A | B) = 61, 也就是 0011 1101 |
^ | 二进制异或操作符的副本,如果它被设置在一个操作数而不是两个比特。 | (A ^ B) = 49, 也就是 0011 0001 |
<< | 二进制左移位运算符。左边的操作数的值向左移动由右操作数指定的位数。 | A << 2 = 240 也就是 1111 0000 |
>> | 二进制向右移位运算符。左边的操作数的值由右操作数指定的位数向右移动。 | A >> 2 = 15 也就是 0000 1111 |
三元运算符
三元运算符例子
运算符 | 描述 | 示例 |
---|---|---|
? : | Ternary | 条件为真 ? X : 否则Y |
Tcl运算符优先级
运算符优先级决定术语的表达分组。这会影响一个表达式是如何进行计算。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级比所述加法运算高。
例如:x =7 + 3* 2;这里,x被赋值13,而不是20,因为运算符 * 优先级高于+,所以它首先被乘以3 * 2,然后加上 7。
这里,具有最高优先级的操作出现在表格上方,那些具有最低出现在底部。在一个表达式中,更高的优先级运算符将首先计算。
运算符优先级示例
分类 | 运算符 | 关联 |
---|---|---|
Unary | + - | Right to left |
Multiplicative | * / % | Left to right |
Additive | + - | Left to right |
Shift | << >> | Left to right |
Relational | < <= > >= | Left to right |
Bitwise AND | & | Left to right |
Bitwise XOR | ^ | Left to right |
Bitwise OR | | | Left to right |
Logical AND | && | Left to right |
Logical OR | || | Left to right |
Ternary | ?: | Right to left |
Tcl算术运算符
下表列出了所有Tcl语言支持的算术运算符。假设变量A=10,变量B=20,则:
运算符 | 描述 | 例子 |
---|---|---|
+ | 两个数相加 | A + B = 30 |
- | 第一个操作数减去第二个操作数 | A - B = -10 |
* | 两个操作数相乘 | A * B = 200 |
/ | 分子(B)除以分母(A) | B / A = 2 |
% | 模运算和整数除法后的余数 | B % A = 0 |
例子
试试下面的例子就明白了所有Tcl语言中可用的算术运算符:
#!/usr/bin/tclshset a 21
set b 10
set c [expr $a + $b]
puts "Line 1 - Value of c is $c\n"
set c [expr $a - $b]
puts "Line 2 - Value of c is $c\n"
set c [expr $a * $b]
puts "Line 3 - Value of c is $c\n"
set c [expr $a / $b]
puts "Line 4 - Value of c is $c\n"
set c [expr $a % $b]
puts "Line 5 - Value of c is $c\n"
当编译和执行上面的程序,它会产生以下结果:
Line 1 - Value of c is 31Line 2 - Value of c is 11Line 3 - Value of c is 210Line 4 - Value of c is 2Line 5 - Value of c is 1
Tcl关系运算符
下表列出了所有Tcl语言支持的关系运算符。假设变量A=10,变量B=20,则:
操作符 | 描述 | 例子 |
---|---|---|
== | 检查两个操作数的值是否相等,如果是的话那么条件为真。 | (A == B) 不为 true. |
!= | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | (A != B) 为 true. |
> | 检查左边的操作数的值是否大于右操作数的值,如果是的话那么条件为真。 | (A > B) 不为 true. |
< | 检查左边的操作数的值是否小于右操作数的值,如果是的话那么条件为真。 | (A < B) 为 true. |
>= | 如果左操作数的值大于或等于右操作数的值,如果是的话那么条件检查为真 | (A >= B) 不为 true. |
<= | 检查左边的操作数的值是否小于或等于右操作数的值,如果是的话那么条件为真。 | (A <= B) 为 true. |
例子
试试下面的例子就明白了所有的Tcl语言版本的关系运算符:
#!/usr/bin/tclshset a 21 set b 10if { $a == $b } {puts "Line 1 - a is equal to b\n" } else {puts "Line 1 - a is not equal to b\n" } if { $a < $b } {puts "Line 2 - a is less than b\n" } else {puts "Line 2 - a is not less than b\n" } if { $a > $b } {puts "Line 3 - a is greater than b\n" } else {puts "Line 3 - a is not greater than b\n" } # Lets change value of a and b set a 5 set b 20 if { $a <= $b } {puts "Line 4 - a is either less than or equal to b\n" } if { $b >= $a } {puts "Line 5 - b is either greater than or equal to b\n" }
当编译和执行上面的程序,会产生以下结果:
Line 1 - a is not equal to bLine 2 - a is not less than bLine 3 - a is greater than bLine 4 - a is either less than or equal to -bLine 5 - b is either greater than or equal to a
Tcl逻辑运算符
下表列出了所有Tcl语言支持的逻辑运算符。假设变量A=1和变量B=0,则:
运算符 | 描述 | 例子 |
---|---|---|
&& | 所谓逻辑与运算符。如果两个操作数都非零,则条件变为真。 | (A && B) 为 false. |
|| | 所谓的逻辑或操作。如果任何两个操作数是非零,则条件变为真。 | (A || B) 为 true. |
! | 所谓逻辑非运算符。使用反转操作数的逻辑状态。如果条件为真,那么逻辑非运算符为假。 | !(A && B) 为 true. |
示例
试试下面的例子就明白了所有Tcl语言提供的逻辑运算符:
#!/usr/bin/tclshset a 5 set b 20if { $a && $b } {puts "Line 1 - Condition is true\n" } if { $a || $b } {puts "Line 2 - Condition is true\n" } # lets change the value of a and b set a 0 set b 10 if { $a && $b } {puts "Line 3 - Condition is true\n" } else {puts "Line 3 - Condition is not true\n" } if { !($a && $b) } {puts "Line 4 - Condition is true\n" }
当编译和执行上面的程序,会产生以下结果:
Line 1 - Condition is trueLine 2 - Condition is trueLine 3 - Condition is not trueLine 4 - Condition is true
Tcl位运算符
通过Tcl语言支持位运算符列在下表中。假设变量A=60和变量B=13,则:
运算符 | 描述 | 例子 |
---|---|---|
& | 二进制和操作符副本位的结果,如果它存在于两个操作数。 | (A & B) = 12 也就是 0000 1100 |
| | 二进制或操作拷贝位,如果它存在一个操作数中。 | (A | B) = 61 也就是 0011 1101 |
^ | 二进制异或操作符的副本,如果它被设置在一个操作数而不是两个比特。 | (A ^ B) = 49 也就是 0011 0001 |
<< | 二进制左移位运算符。左边的操作数的值向左移动由右操作数指定的位数。 | A << 2 = 240 也就是 1111 0000 |
>> | 二进制向右移位运算符。左边的操作数的值由右操作数指定的位数向右移动。 | A >> 2 = 15 也就是 0000 1111 |
示例
试试下面的例子就明白了所有Tcl语言中可用的位运算符:
#!/usr/bin/tclshset a 60 ;# 60 = 0011 1100 set b 13 ;# 13 = 0000 1101 set c [expr $a & $b] ;# 12 = 0000 1100 puts "Line 1 - Value of c is $c\n"set c [expr $a | $b;] ;# 61 = 0011 1101 puts "Line 2 - Value of c is $c\n"set c [expr $a ^ $b;] ;# 49 = 0011 0001 puts "Line 3 - Value of c is $c\n"set c [expr $a << 2] ;# 240 = 1111 0000 puts "Line 4 - Value of c is $c\n"set c [expr $a >> 2] ;# 15 = 0000 1111 puts "Line 5 - Value of c is $c\n"
当编译和执行上面的程序,会产生以下结果:
Line 1 - Value of c is 12Line 2 - Value of c is 61Line 3 - Value of c is 49Line 4 - Value of c is 240Line 5 - Value of c is 15
Tcl三元运算符
在Tcl中一个重要的运算符是三元运算符。
运算符 | 描述 | 示例 |
---|---|---|
? : | 条件表达式 | 条件为真 ? 那么值为 X : 否则值为 Y |
示例
试试下面的例子来理解Tcl语言的三元运算符:
#!/usr/bin/tclshset a 10; set b [expr $a == 1 ? 20: 30] puts "Value of b is $b\n" set b [expr $a == 10 ? 20: 30] puts "Value of b is $b\n"
当编译和执行上面的程序,会产生以下结果:
Value of b is 30Value of b is 20
Tcl运算符优先级
运算符优先级决定术语的表达分组。这会影响一个表达式是如何进行计算。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级比所述加法运算高。
例如x= 7+ 3 *2;这里,x被赋值13,而不是20,因为运算符 * 优先级高于+,所以它首先被乘以 3 * 2,然后加上7。
这里,具有最高优先级的操作出现在表格上方,那些具有最低出现在底部。在一个表达式,更高的优先级运算符将首先计算。
分类 | 操作符 | 关联 |
---|---|---|
Unary | + - | Right to left |
Multiplicative | * / % | Left to right |
Additive | + - | Left to right |
Shift | << >> | Left to right |
Relational | < <= > >= | Left to right |
Equality | == != | Left to right |
Bitwise AND | & | Left to right |
Bitwise XOR | ^ | Left to right |
Bitwise OR | | | Left to right |
Logical AND | && | Left to right |
Logical OR | || | Left to right |
Ternary | ?: | Right to left |
示例
试试下面的例子来理解Tcl语言可供选择的运算符优先级:
#!/usr/bin/tclshset a 20 set b 10 set c 15 set d 5set e [expr [expr $a + $b] * $c / $d ] ;# ( 30 * 15 ) / 5 puts "Value of (a + b) * c / d is : $e\n"set e [expr [expr [expr $a + $b] * $c] / $d] ;# (30 * 15 ) / 5] puts "Value of ((a + b) * c) / d is : $e\n"set e [expr [expr $a + $b] * [expr $c / $d] ] ;# (30) * (15/5) puts "Value of (a + b) * (c / d) is : $e\n"set e [expr $a + [expr $b * $c ] / $d ] ;# 20 + (150/5) puts "Value of a + (b * c) / d is : $e\n"
当编译和执行上面的程序,会产生以下结果:
Value of (a + b) * c / d is : 90Value of ((a + b) * c) / d is : 90Value of (a + b) * (c / d) is : 90Value of a + (b * c) / d is : 50
初识Tcl(三):Tcl 变量及运算符相关推荐
- python变量运算符_Python(三) 变量与运算符
一.什么是变量 变量 = [1,2] 二.变量的命名规则 字母,数字,下划线,首字母不能是数字 系统关键字 不能用在变量名中 保留关键字 区别大小写 a=1, a='1', a=(1,2), ...
- 用按位异或运算符交换两个数,不引入第三个变量
2019独角兽企业重金招聘Python工程师标准>>> 用按位异或运算符交换两个数,不引入第三个变量 void swap(int &a , int &b) { a = ...
- 【Java基础系列教程】第三章 Java变量与运算符
一.Java程序基本结构 1.1 基本结构 Java程序基本结构示例代码: /** * 这里是文档注释 * 这是一个HelloWorld程序 */ public class HelloWorld {p ...
- CorelDRAW插件-GMS插件开发-VBA基础语法-变量、运算符、函数-CDR插件(三)
文章目录 1.变量 1.1.命名要求 1.2.作用域 1.3.变量赋值 1.4.数组 2.运算符 2.1.算术操作符 2.2.比较运算符 2.3.逻辑运算符 2.4.连接操作符 3.函数 3.1.无参 ...
- Java基础语法之变量、运算符、流程控制、数组和方法等基础语法
变量.运算符.流程控制.数组和方法等基础语法.Java程序的执行流程,符合Java语法规则的程序. 1.1.1 Java初识 对Java进行简单介绍,Java程序如何执行,以及Java程序的结构. J ...
- 【天天Java系列】02_变量与运算符
文章目录 1.关键字(keyword) 2.标识符 3.变量 3.1为什么需要变量? 3.2初识变量 3.3Java中变量的数据类型 3.4 变量的使用 3.4.1 变量的声明 3.4.2 变量的赋值 ...
- 刻意练习:Python基础 -- Task01. 变量、运算符与数据类型
背景 我们准备利用17天时间,将 Python 基础的刻意练习分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task03:列表与元组(2day ...
- option:contains后面加变量_Python基础篇 -2:初识Python中的变量
Python学习基础篇 -2 前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 . 第二篇 ...
- Shell基础:变量类型 运算符
Shell变量 Shell支持三种类型的变量 用户自定义变量:用户自定义的变量,变量名以英文字母或下划线开头,区分大小写. 位置变量:根据位置传递参数给脚本的变量,默认支持9个位置变量 $1,$2,$ ...
最新文章
- LeetCode简单题之1比特与2比特字符
- android 毕业设计 文献翻译,android毕业设计外文翻译.doc
- JAXB –新手的观点,第2部分
- sublime设置空格替换tab键
- netty sync方法_netty是如何封装NIO的
- 自动化测试--8种定位方式以及等待详解
- 华为发布近2万元折叠屏手机Mate Xs;iPhone 12或支持WiFi新标;Electron 6.1.8发布 | 极客头条...
- 详细介绍Linux shell脚本基础学习(一)
- 生物信息学主要研究方向
- js实现省市名称简称 ,echarts全国地图省市名称简称
- Number of ways to split should evenly divide the split dimension, but got split_dim 3 (size = 4) and
- java获取手机通讯录权限_iOS6 中如何获得通讯录访问权限
- windows 防火墙日志_如何使用Windows防火墙日志跟踪防火墙活动
- 第3次作业-卷积神经网络
- N32926 usb gadget 加 adb驱动, 插入USB线一点反应都没有。
- Python版本控制工具 py launcher
- 带MPPT的同步降压电路的设计-开题报告
- 火狐linux版更改语言,修改Firefox火狐语言 添加火狐语言包的方法
- linux+安装xp系统下载,linux系统怎么安装xp系统
- 华为OD机试真题 C++ 实现【获取最大软件版本号】【2022.11 Q4 新题】
热门文章
- 电脑的基础术语_运营小白,你应该知道的基础专业术语
- android 中间按钮突出,Android 实现 按钮从两边移到中间动画效果
- oracle 查询reference,ORACLE高级查询之MODEL PART3
- mysql注释符号按键,Shell 注释
- wps android x86,Android-x86 8.1-rc5 发布:PC 上的安卓系统
- 二元函数泰勒公式例题_考研数一对二元函数的二阶泰勒公式的要求是了解,那我们要了解到什么程度呢?会出那种类型的题呢?...
- 应用OpenCV进行图像旋转和平移
- 实验室电子设备选型-2020-年末
- 交互式讲解傅里叶变换
- html 二叉树模式,重建二叉树.html