① excel vba常用代码
Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。[1]
数据类型
基本数据类型
即Primary Type Data,下述列表的括号内为字节数:
Byte(1):无符号数类型,取值范围0-255
Boolean(2)
Integer(2)
Long(4)
Single(4)
Double(8)
Currency(8)
Decimal(14)
Date(8)
String
Object(4)
Variant(根据分配确定)[2]
自定义的数据类型
相当于C语言的struct,例如:[2]
Type 自定义类型名 元素名 As 类型 … [元素名 As 类型] End Type
数组
Option Base 0 :数组索引值从0开始[2]
Option Base 1 :数组索引值从1开始
Dim MyArray(10) :声明一个数组变量,10是最大的可用的数组索引值
MyArray(5) = 101 :给数组的元素赋值
Dim Data(10,5) :声明一个二维数组变量
Data(1,1) = "A001" :给数组元素赋值
Dim cArr(-11 To 20, 1 To 3) As String :声明一个数组,定义数组索引值的上下界
Dim dArr() As String :声明动态数组
ReDim dArr(0 To 5, 1 To 2) :改变动态数组的尺寸默认把原数据清除。如果保留原来的数据,必须加上参数
Preserve:使用Preserve参数时只能改变最后一位的大小
If UBound(vTemp) = -1 Then:判断数组变量vTemp是否为空数组
End If Erase MyArrar, Data Erase语句清除数组元素,释放变量占用的空间[2]
常量
编辑
系统定义常量
系统定义常量有3个:True、False和Null。[4]
固有常量
固有常量是编程时引用的对象库定义的常量。所有固有常量都可以在宏或VBA代码中使用。通常,固有常量通过前两个字母来指明定义该常量。来自VB库的常量则以“vb”开头。来自Access的常量以“ac”开头。可以使用对象浏览器来查看所有对象库中的固有常量列表。[4]
在VBA中,常量的数据类型有整型、长整型、单精度型、双精度型、字节型、货币型、字符型、日期型和逻辑型。一个整型数据就是一个整型常量,一个长整型数据就是一个长整型常量。例如,12%、-1%是整型常量,32768&、10000000&是长整型常量,-2.5 1、3.14是单精度实型常量,3.1415926#是双精度实型常量,China、Shanghai是字符型常量,#07/13/2001 11:45PM#是日期常量,由符号 “ # ” 将字符括起来。[4]
符号常量
可以自行定义的常量即符号常量,必须先定义,后使用。可见,需要声明的常量都是符号常量。[4]
基本语法格式:
1如:Global Const符号常量名称 = 常量值[4]
语句功能:
定义一个符号常量,并将指定表达式的值赋给符号常量。[4]
语句说明如下:[4]
1)“常量名”指定符号常量的名字。符号常量名可以由字母、数字和下画线组成,但只能以字母开头,不能含有空格。[4]
2)“表达式”指定符号常量的值。该表达式通常由数值型、字符型、逻辑型或日期型数据以及各种运算符组成,但在表达式中不能出现变量和函数。[4]
3) public用来表示这个常量的作用范围是整个数据库的所有模块。[4]
4) private则表示这个常量只在使用该声明常量语句的模块中起作用。[4]
说明:
1)除用户定义的符号常量外,VBA还提供了许多符号常量,我们可以直接使用。[4]
2)对数码比较长,并且在程序中多次使用的常量,通常使用符号常量代替。运行程序时,系统自动把程序中的所有符号常量换为赋给它的值。[4]
变量
编辑
与常量一样,变量也是一块内存空间,用于保存程序运行过程中可能变化的数据。变量的名称是用户定义的一个标识符。[5]
在代码中需要使用该变量时,只需引用相应的标识符即可,而不用管变量当前的值具体是什么。[5]
声明
与用户自定义的常量相似,变量在使用之前都需要声明,在VBA中声明变量的语法格式有以下几种:[5]
关键字变量名 AS数据类型
关键字变量1,变量2 ... 变量n AS数据类型
关键字变量1 AS数据类型,变量2 As数据类型, ... ,变量n AS数据类型
在第二种语法格式中, “变量n”的数据类型为AS关键字后定义的数据类型,而“变量1”、“变量2”、…的数据类型为变体型。[5]
在VBA中,可用Dim、Private、Public和Static这4个关键字来声明变量,使用不同关键字声明的变量其含义也有所不同。[5]
◆ 利用Dim关键字声明变量:Dim关键字主要用来在内存中分配一块空间,并为该空间命名,是VBA中声明变量最常用的关键字。使用Dim关键字声明的变量只能在当前过程或模块中使用。[5]
◆ 利用Private关键字声明变量:Private关键字用于在类模块中声明一个私有变量,它只能在当前的类模块中使用。当定义变量的位置同处于类模块中时,其使用效果与使用Dim关键字定义的变量相同。[5]
◆ 利用Public关键字声明变量:利用Public关键字声明的变量可以在程序的任何地方调用,而与声明变量的位置无关。[5]
◆ 利用Static关键字声明变量:Static关键字用于声明静态变量,即变量的值在整个代码运行期间都能被保留。[5]
赋值
变量在使用时还需要对其进行赋值。在VBA中对变量进行赋值可通过 “ = ” 符号或 “ Set ” 关键字进行。通过 “ = ” 符号对变量赋值的语法格式有以下几种。[5]
变量名=数据
变量1=变量2 运算符 数据
变量1=变量2 运算符 变量3 … 运算符 变量n
如果在定义变量时指定了变量的数据类型,则为变量所赋的值也必须是该数据类型的值。如果变量定义为Integer类型,而在赋值时却给了变量一个String类型的数据,则在编译运行的过程中将弹出错误弹框。[5]
运算符
编辑
运算符是在程序中执行计算功能的某些特殊符号,它是程序代码的重要组成部分。在程序代码中,运算符不能单独使用,必须与其操作数共同组成表达式后才具有运算意义。VBA中的运算符包含算术运算符、连接运算符、比较运算符和逻辑运算符等。[4]
算术运算符
算术运算符主要用于执行四则运算,仅用算术运算符连接起来的表达式称为算术表达式。算术运算符及其作用与示例如表所示。[5]
例子
名称
结果
-$a
取反
$a 的负值。
$a + $b
加法
$a 和 $b 的和。
$a - $b
减法
$a 和 $b 的差。
$a * $b
乘法
$a 和 $b 的积。
$a / $b
除法
$a 除以 $b 的商,允许小数。
$a $b 除法 $a 除以 $b 的商,结果取整。
$a Mod $b
取余
$a 除以 $b 的余数
注意:
在执行算术运算时,运算符两侧操作的数据类型必须相同,否则会出现“类型不匹配”的错误提示。当“+”运算符左右两侧都是字符串类型的操作数时,执行的是连接运算,如表达式“"Pass+"word"的计算结果为字符串“ PassWord ”。[5]
连接运算符
连接运算符的作用是将运算符两侧的操作数连接成一个数,其操作数的数据类型通常都为String类型。VBA中的连接运算符有“&”和“+”两种,由于使用“+”执行连接运算时,容易与加法运算混淆,所以通常都采用“&”进行连接运算。[5]
比较运算符
比较运算符可以对运算符两侧的操作数执行比较运算,其返回结果为Boolean类型的True或False。比较运算符的操作数通常为具体的数值,当操作数为字符串或其他符号时,是根据该符号的ASCII码进行比较的。VBA中的比较运算符及其作用与示例如表所示。[5]
例子
名称
结果
$a = $b
等于
TRUE,如果 $a 等于 $b。
$a <> $b
不等
TRUE,如果 $a 不等于 $b。
$a < $b
小于
TRUE,如果 $a 严格小于 $b。
$a > $b
大于
TRUE,如果 $a 严格大于 $b。
$a <= $b
小于等于
TRUE,如果 $a 小于或者等于 $b。
$a >= $b
大于等于
TRUE,如果 $a 大于或者等于 $b。
逻辑运算符
逻辑运算符用于对运算符两侧的操作数执行逻辑运算,参与逻辑运算的操作数本身可以是逻辑表达式(表达式的最终结果为True或 False),也可以是算术表达式(表达式的最终返回值为0或非0)。[5]
在逻辑运算中,数值0与逻辑值 False相同,表示逻辑假;非0数值与True相同,表示逻辑真。逻辑运算符及其含义与示例如表所示。[5]
例子
名称
结果
$a and $b
And(逻辑与)
TRUE,如果 $a 与 $b 都为TRUE。
$a or $b
Or(逻辑或)
TRUE,如果 $a 或 $b 任一为TRUE。
$a xor $b
Xor(逻辑异或)
TRUE,如果 $a 或 $b 同位相异。
Not(1>2)
Not(逻辑非)
TRUE。
(1>2) Eqv (1>2)
两个操作数同为假,返回False;两个操作数同为真,返回True;两个操作数一真一假,返回False
TRUE。
2<>1 Imp 3<5
运算符左右同为真,返回True;左右同为假,返回True;左真右假,回返 False;左假右真,返回True
TRUE。
语法结构
编辑
if 语句
1Select Case 语句
1其中的表达式列表可以为:[5]
表达式例: "A"
用逗号分隔的一组枚举表达式例:2,4,6,8
表达式1 To表达式2 例:60 To 100
Is关系运算符表达式 例:Is < 60
Do...Loop 语句
1For...Next语句
1For Each … Next语句
1跳出本次循环的continue语句
1With语句
1On Error语句
1或
1具有控制作用的函数
If(条件式,表达式1,表达式2)[5]
Switch(条件式1,表达式1,[条件式2,表达式2[,...,条件式n,表达式n]])
Choose(索引式,选项1[,选项2,...[,选项n]]) '这是基于1的索引
其他语句
编辑
注释语句
使用REM或者单引号开始的行。[6]
语句的连写与续行
如果一行包括多条语句,用冒号分割各个语句。跨多行的语句,在行末用“空格加下划线”表示续行[6]。
过程与函数
编辑
12可以是Private、Public、Friend、Static等修饰。[6]
调用函数/过程时,可以加括号或者不加括号。如果调用表达式作为一行的一部分,那么必须用参数,例如函数调用的返回值赋给变量。 调用过程时, 可以使用/不使用call关键字。使用call语句调用过程,如果无参数,则不加括号;如果有参数,必须加括号。如果调用时用括号包住单个参数,则该参数强行按值传递。需要特别注意,不用call不加括号的调用,形参与实参是传值(passed by value)而不是传引用(passed by reference),这会导致一些对象的方法调用失败。例如:[6]
1常用内置函数
编辑
VBA的常用内置函数:[5]
MsgBox
InputBox
舍入函数:Fix 向0取整,Int向下取整, Round四舍五入
Rnd: 返回0-1内的单精度随机数
字符串函数:[5]
Filter:对字符串的一维数组的过滤
InStr([Start, ]<Str1>,<Str2>[, Compare])与InStrRev: 查找子串
Len:字符串长度
Join:连接一维数组中的所有子字符串
Left,Right,Mid: 截取子字符串
Space(数值) :生成空格字符串
Ucase,Lcase:大小写转换函数
Ltrim, Rtrim,Trim :删除首尾空格
Replace
Split:分割一个字符串成为一维数组
StrComp:字符串比较
StrConv:字符串转换
String(number, character):制定字符重复若干次
StrReverse
日期/时间有关函数:[5]
Year, Month, Day, WeekDay,Hour,Minute,Second: 截取日期时间分量
DateAdd: 日期/时间增量函数
DateDiff(<间隔类型>,<日期1>,<日期2>[,W1][,W2])日期/时间的距离函数
DatePart(<分割类型>,<日期>[,w1][,w2])时间分割函数
DateSerial(<表达式1>,<表达式2>,<表达式3>) 合成日期;DateValue(“字符串表达式”)返回日期;
Date,Time,Now,Timer: 返回日期时间
DateValue
TimeSerial:由时间序列得到时间对象
TimeValue:由时间字符串得到时间对象
Weekday:获得日期的周几
WeekdayName
转换函数:CBool、CByte、CCur、CDate、 CDbl、CDec、CInt、CLng、CLngLng、CLngPtr、[5]CSng、CStr、CVar、CVErr、Asc(<字符串表达式>)返回第一个字符的Ascii编码值、Chr(ASCII码)返回字符、Hex、Oct、Str(<数值表达式>)返回字符串、Val(string)、Format、FormatCurrency、FormatDateTime、FormatNumber、FormatPercent、MonthName。
Nz(表达式或字段属性值[,规定值])如果是空,则返回0或者""或者函数的第二个参数值[5]
验证函数:isNumeric、isDate、isNull、isEmpty、IsArray、IsError、IsMissing、IsObject[5]
数学函数:Abs、Sqr、Tan、Atn(即atan)、Sin、Cos、Exp(e为基的指数)、Log自然对数[5]
Array:构造一个Array对象[5]
CallByName: get or set a property, or invoke a method at run time using a string name.[5]
控制流:Choose:类似于C语言的select语句、If相当于IF-ELSE语句、Switch[5]
Command:获取命令行参数[5]
CreateObject:创建ActiveX对象
CurDir:返回指定驱动器的当前工作路径[5]
由基本数学函数导出的函数:Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN
DoEvents:暂时把CPU控制权交回给系统[5]
Environ:返回环境变量的值[5]
文件操作:[5]
Dir:返回满足条件的所有文件、目录的名字
EOF
FileAttr
FileDateTime
FileLen
FreeFile Function
GetAttr:返回文件、目录的属性值
Input:读取文件
Loc:文件指针位置
LOF:文件打开时的指针位置
Seek:文件指针定位
Spc:使用Print做position output
Tab:用于Print函数
Error:错误号对应的错误消息[5]
Windows Registry中的数据:GetAllSettings、SaveSetting、DeleteSetting、GetSetting[5]
GetObject:ActiveX组建的引用[5]
IMEStatus:返回当前Input Method Editor (IME)[5]
Macintosh平台:MacID、MacScript[5]
金融函数:[5]
DDB:使用double-declining balance计算贬值
FV:计算固定利率的年金
IPmt:计算利率
IRR:计算利率
MIRR:计算利率
NPer:计算周期数
NPV:计算net present value
Pmt:计算支付数
PPmt:计算本金支付数
PV:计算present value
Rate:利息率
SLN:straight-line depreciation
SYD:计算sum-of-years' digits depreciation
Partition:返回字符串,表示一个数值名字落在各个range内。常用于SQL select语句[5]
QBColor:颜色值[5]
RGB:颜色值[5]
TypeName:得到变量的类型名[5]
VarType:得到变量的类型数[5]
② php中有几个截取字符创的函数
php字符串截取函数可分为英文截取和中文截取:
php截取英文字符串的函数事例substr()函数
<?php
//构造字符串
$str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
echo"原字符串:".$str."";
//按各种方式进行截取
$str1=substr($str,5);
echo"从第5个字符开始取至最后:".$str1."";
$str2=substr($str,9,4);
echo"从第9个字符开始取4个字符:".$str2."";
$str3=substr($str,-5);
echo"取倒数5个字符:".$str3."";
$str4=substr($str,-8,4);
echo"从倒数第8个字符开始向后取4个字符:".$str4."";
$str5=substr($str,-8,-2);
echo"从倒数第8个字符开始取到倒数第2个字符为止:".$str5."";
?>
php截取中文字符串长度的mb_substr()、mb_strcut()函数
<?php
echomb_substr('这样一来我的字符串就不会有乱码^_^',0,7,'utf-8');
?>
输出:这样一来我的字
<?php
echomb_strcut('这样一来我的字符串就不会有乱码^_^',0,7,'utf-8');
?
③ 关于随机数组
maze[9][9]=0;//起点和终点
越界了
int maze[9][9]; 这个是定义,访问的时候最多访问maze[8][8],越界就是访问了一个数组外的非法地址
----------------
for (i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
x=(((double)rand()/(double)RAND_MAX)*RANGE_MAX+RANGE_MIN);
if(x%2)
maze[i][j]=0;
else maze[i][j]=1;//随机生成一个迷宫
}
}
当i=9,j=9的时候maze[i][j]越界,肯定崩溃了
另外随机数本身没有问题,其实没有必要那么复杂,你就x = rand()即可,然后看他是否能被2除尽,反正都是50%的概率。还有简单的方法,你可以得到一个随机数,然后扩大N倍之后把它的二进制形式(010100001101这样的形式)直接作为结果,一次可以得到很多数,有些加密算法随机数就这么得到。
rand看似随机,实际上也是根据数学公式来的,既然是公式就没有绝对的随机,,所以你如果想得到大量随机数,必须经常用时间种子来初始化随机数生成器,你可以做个试验看看rand多少次就开始重复(不再随机)
④ 高铁和动车有什么区别
1、运行速度不同。动车组列车运行速度有160级、200级和250级。高铁时速一般不低于250级,时速有250级、350级、380级、400级等。
2、运行范围不同。普通动车组通常跨省区域运行;高速动车组:运输距离长短不一,省内有运行,跨省也有运行。
3、信号系统不同。动车可以在既有线行驶(普通动车组的信号系统与既有线兼容),高铁则必须在新建的客专上行驶(高速动车组的信号系统不与既有线兼容)
4、动力方式不同。动车分动力集中式和动力分散式,我国常见的CRH系列动车都是动力分散的,且都是交流传动,此外地铁列车也可以算动车(一般都是直流传动)。
(4)chr数字货币扩展阅读:
火车其他列车类型:
1、城际动车组列车(C字头)
2008年8月1日,京津城际铁路正式对公众运行,新启用车次为C+4位数字,意为城际列车,目前最高时速是300公里,铁路系统标准念法为“城**次”。京津城际的车次范围是C2001~C2282次。例如:武汉城际列车的车次范围是C5001~C5720。
2、直达特快旅客列车(Z字头)
最高时速160公里,铁路系统标准念法为“直**次”。大部分为全列软席,少部分车加挂硬卧与硬座,全程只有部分车停靠起点站和/或终点站所在铁路局管内的大站。此类列车为空调列车。
3、特快旅客列车(T字头)
最高时速140公里,铁路系统标准念法为“特**次”。跨局特快全程只停省会城市、副省级市和少量主要地级市等特大站或直达,管内特快全程一般只停地级市。此类列车为空调列车。
⑤ 元宇宙概念币有哪些
1.MANA
Decentraland(数字货币代码:MANA)包括一个去中心化的领地所有权账本、一份描述每块领地内容的协议以及用户互动的点对点网络。Decentraland是一个分布式共享虚拟平台。在这个平台上,用户可以浏览和发现内容,并与其他人和实体互动。用户还可以通过基于区块链的土地账本宣称对虚拟领地的所有权。领地由直角坐标(X,Y)来划定,其所有者可以决定领地上发布的内容,包括从静态3D场景到游戏等互动式系统。领地是存储在以太坊智能合同中的不可替代的、可转移的稀有数字资产,可用名为MANA的ERC20代币购买。MANA代币可以用来购买领地、商品和服务,还可以作为激励措施来鼓励内容创造和用户采用度,进而实现一个去中心化的虚拟世界。
MANA最近被炒得火热,不少朋友目前也被套在山顶了。巅峰时期价格为4.9美元附近接近5美元。风头过去之后现在价格正在回落,能否再次被拉高目前也不确定。MANA(Decentraland)和ENJ(Enjin)算是NFT 中的两大龙头项目,其中MANA曾是区块链游戏类第一大流通市值项目,被认为是VR版头号玩家。Decentraland显然是资格比较老旧的一个,特别是对于加密元宇宙,目前真的处于早期阶段,所以永远不要认为你进场晚了,毕竟新的韭菜会越来越多。如果你只是想玩游戏,或者如果你想通过 Axie 赚钱,那么总是有很多时间以你想要的方式进入,在它们上面有很多潜力。
2.SAND
Sandbox声称是一个虚拟世界,玩家可以使用平台的实用程序令牌SAND在以太坊区块链中构建,拥有自己的游戏并从中获利。据称玩家可以创建数字资产不可替代令牌也称为NFT,将其上传到市场,然后拖放它们以使用TheSandboxGameMaker创建游戏体验。沙盒(Sandbox)旨在通过提供真实所有权和数字稀缺性以及货币化功能和互操作性的优势,将区块链带入主流游戏吸引加密和非加密游戏爱好者。
3.AXS
Axie Infinity(AXS币)是一个建立在以太坊区块链上的,受神奇宝贝启发的数字宠物世界。任何人都可以通过参与游戏和对游戏世界做出贡献来获得代币奖励,项目愿景是将工作和娱乐成为一体。Axie Infinity成为一个集收集、训练、饲养、战斗、社交玩法于一体数字宠物社区,每个Axie都有独特的遗传数据存储在以太坊链上,具备独特的价值。
4.CHR
Chromia(CHR币)是一个新的区块链平台,主要用于去中心化应用程序。相比于以太坊,Chromia最大的优势更快的速度和更灵活的收费策略。它是针对现有平台的缺点而设计的,旨在使新一代程序(dapps)能够扩展到当前可能的范围之外。Chromia既是一个区块链,也是一个关系数据库。这意味着分散式应用程序(dapps)可以以全世界开发人员都熟悉的方式编写,无论是大型企业应用程序、游戏还是小型项目。
5.TLM
TLM是Alien Worlds项目代币,Alien Worlds是NFT DeFi的元宇宙,可以模拟玩家之间的经济竞争与合作。 通过激励玩家获取Trilium(TLM),用户可以控制自治组织(Planet DAO)并获得更多游戏玩法。
6.SLP
SLP(Small Love Potion)是一种可以在以太坊区块链上使用的ERC-20代币。Axie Infinity是一款在以太坊区块链上运行的游戏(dapp),用户可以在这里收集、饲养、繁殖和战斗名为axies的虚拟生物。Axies和现实生活中的宠物非常相似,每一个都有自己独特的特征和外表。
⑥ 月兔元宇宙虚拟货币多少一枚
目前为720元一枚。
元宇宙数字货币主要有SLP、TLM、CHR、SAND、AXS、MANA六种货币,元宇宙数字货币龙头主要代表有NFT、DeFi、Roblox,NFT使数字内容资产化,币安NFT平台上线将币安NFT交易市场NFT简单化。月兔虚拟货币属于TLM的一种。
⑦ 跪求!关于计算机的文章
注:文章分两部分,计算机的现状和未来
计算机发展及现状
计算机网络是计算机技术和通信技术紧密结合的产物,它涉及到通信与计算机两个领域。它的诞生使计算机体系结构发生了巨大变化,在当今社会经济中起着非常重要的作用,它对人类社会的进步做出了巨大贡献。从某种意义上讲,计算机网络的发展水平不仅反映了一个国家的计算机科学和通信技术水平,而且已经成为衡量其国力及现代化程度的重要标志之一。
自50年代开始,人们及各种组织机构使用计算机来管理他们的信息的速度迅速增长。早期,限于技术条件使得当时的计算机都非常庞大和非常昂贵,任何机构都不可能为雇员个人提供使用整个计算机,主机一定是共享的,它被用来存储和组织数据、集中控制和管理整个系统。所有用户都有连接系统的终端设备,将数据库录入到主机中处理,或者是将主机中的处理结果,通过集中控制的输出设备取出来。它最典型的特征是:通过主机系统形成大部分的通信流程,构成系统的所有通信协议都是系统专有的,大型主机在系统中占据着绝对的支配作用,所有控制和管理功能都是由主机来完成。
随着计算机技术的不断发展,尤其是大量功能先进的个人计算机的问世,使得每一个人可以完全控制自己的计算机,进行他所希望的作业处理,以个人计算机(PC)方式呈现的计算能力发展成为独立的平台,导致了一种新的计算结构---分布式计算模式的诞生。
一般来讲,计算机网络的发展可分为四个阶段:
第一阶段:计算机技术与通信技术相结合,形成计算机网络的雏形;
第二阶段:在计算机通信网络的基础上,完成网络体系结构与协议的研究,形成了计算机网络;
第三阶段:在解决计算机连网与网络互连标准化问题的背景下,提出开放系统互连参考模型与协议,促进了符合国际标准的计算机网络技术的发展;
第四阶段:计算机网络向互连、高速、智能化方向发展,并获得广泛的应用。
任何一种新技术的出现都必须具备两个条件:即强烈的社会需求与先期技术的成熟。计算机网络技术的形成与发展也证实了这条规律。1946年世界上第一台电子数字计算机ENIAC在美国诞生时,计算机技术与通信技术并没有直接的联系。50年代初,由于美国军方的需要,美国半自动地面防空系统SAGE进行了计算机技术与通信技术相结合的尝试。要实现这样的目的,首先要完成数据通信技术的基础研究。在这项研究的基础上,人们完全可以将地理位置分散的多个终端通信线路连到一台中心计算机上。用户可以在自己的办公室内的终端键入程序,通过通信线路传送到中心计算机,人们把这种以单个为中心的联机系统称做面向终端的远程联机系统。它是计算机通信网络的一种。60年代初美国航空公司建成的由一台计算机与分布在全美国的2000多个终端组成的航空订票系统SABRE-1就是这种计算机通信网络。
随着计算机应用的发展,出现了多台计算机互连的需求。这种需求主要来自军事、科学研究、地区与国家经济信息分析决策、大型企业经营管理。他们希望将分布在不同地点的计算机通过通信线路互连成为计算机-计算机网络。网络用户可以通过计算机使用本地计算机的软件、硬件与数据资源,也可以使用连网的其它地方计算机软件、硬件与数据资源,以达到计算机资源共享的目的。这一阶段研究的典型代表是美国国防部高级研究计划局(ARPA,Advanced Research Projects Agency)的ARPAnet(通常称为ARPA网)。1969年ARPA网只有4个结点,1973年发展到40个结点,1983年已经达到100多个结点。ARPA网通过有线、无线与卫星通信线路,使网络覆盖了从美国本土到欧洲与夏威夷的广阔地域。ARPR网是计算机网络技术发展的一个重要的里程碑,它对发展计算机网络技术的主要贡献表现在以下几个方面:
1、完成了对计算机网络的定义、分类与子课题研究内容的描述;
2、提出了资源子网、通信子网的两级网络结构的概念;
3、研究了报文分组交换的数据交换方法;
4、采用了层次结构的网络体系结构模型与协议体系。
未来计算机与计算机技术
计算机的要害技术继续发展
未来的计算机技术将向超高速、超小型、平行处理、智能化的方向发展。尽管受到物理极限的约束,采用硅芯片的计算机的核心部件CPU的性能还会持续增长。作为Moore定律驱动下成功企业的典范Inter预计2001年推出1亿个晶体管的微处理器,并预计在2010年推出集成10亿个晶体管的微处理器,其性能为10万MIPS(1000亿条指令/秒)。而每秒100万亿次的超级计算机将出现在本世纪初出现。超高速计算机将采用平行处理技术,使计算机系统同时执行多条指令或同时对多个数据进行处理,这是改进计算机结构、提高计算机运行速度的要害技术。
同时计算机将具备更多的智能成分,它将具有多种感知能力、一定的思考与判定能力及一定的自然语言能力。除了提供自然的输入手段(如语音输入、手写输入)外,让人能产生身临其境感觉的各种交互设备已经出现,虚拟现实技术是这一领域发展的集中体现。
传统的磁存储、光盘存储容量继续攀升,新的海量存储技术趋于成熟,新型的存储器每立方厘米存储容量可达10TB(以一本书30万字计,它可存储约1500万本书)。信息的永久存储也将成为现实,千年存储器正在研制中,这样的存储器可以抗干扰、抗高温、防震、防水、防腐蚀。如是,今日的大量文献可以原汁原味保存、并流芳百世。
新型计算机系统不断涌现
硅芯片技术的高速发展同时也意味着硅技术越来越近其物理极限,为此,世界各国的研究人员正在加紧研究开发新型计算机,计算机从体系结构的变革到器件与技术革命都要产生一次量的乃至质的飞跃。新型的量子计算机、光子计算机、生物计算机、纳米计算机等将会在21世纪走进我们的生活,遍布各个领域。
量子计算机
量子计算机是基于量子效应基础上开发的,它利用一种链状分子聚合物的特性来表示开与关的状态,利用激光脉冲来改变分子的状态,使信息沿着聚合物移动,从而进行运算。
量子计算机中数据用量子位存储。由于量子叠加效应,一个量子位可以是0或1,也可以既存储0又存储1。因此一个量子位可以存储2个数据,同样数量的存储位,量子计算机的存储量比通常计算机大许多。同时量子计算机能够实行量子并行计算,其运算速度可能比目前个人计算机的PentiumⅢ晶片快10亿倍。目前正在开发中的量子计算机有3种类型:核磁共振(NMR)量子计算机、硅基半导体量子计算机、离子阱量子计算机。预计2030年将普及量子计算机。
光子计算机
光子计算机即全光数字计算机,以光子代替电子,光互连代替导线互连,光硬件代替计算机中的电子硬件,光运算代替电运算。
与电子计算机相比,光计算机的“无导线计算机”信息传递平行通道密度极大。一枚直径5分硬币大小的棱镜,它的通过能力超过全世界现有电话电缆的许多倍。光的并行、高速,天然地决定了光计算机的并行处理能力很强,具有超高速运算速度。超高速电子计算机只能在低温下工作,而光计算机在室温下即可开展工作。光计算机还具有与人脑相似的容错性。系统中某一元件损坏或出错时,并不影响最终的计算结果。
目前,世界上第一台光计算机已由欧共体的英国、法国、比利时、德国、意大利的70多名科学家研制成功,其运算速度比电子计算机快1000倍。科学家们预计,光计算机的进一步研制将成为21世纪高科技课题之一。
生物计算机(分子计算机)
生物计算机的运算过程就是蛋白质分子与四周物理化学介质的相互作用过程。计算机的转换开关由酶来充当,而程序则在酶合成系统本身和蛋白质的结构中极其明显地表示出来。
20世纪70年代,人们发现脱氧核糖核酸(DNA)处于不同状态时可以代表信息的有或无。DNA分子中的遗传密码相当于存储的数据,DNA分子间通过生化反应,从一种基因代玛转变为另一种基因代码。反应前的基因代码相当于输入数据,反应后的基因代码相当于输出数据。假如能控制这一反应过程,那么就可以制作成功DNA计算机。
蛋白质分子比硅晶片上电子元件要小得多,彼此相距甚近,生物计算机完成一项运算,所需的时间仅为10微微秒,比人的思维速度快100万倍。DNA分子计算机具有惊人的存贮容量,1立方米的DNA溶液,可存储1万亿亿的二进制数据。DNA计算机消耗的能量非常小,只有电子计算机的十亿分之一。由于生物芯片的原材料是蛋白质分子,所以生物计算机既有自我修复的功能,又可直接与生物活体相联。预计10~20年后,DNA计算机将进入实用阶段。
纳米计算机
“纳米”是一个计量单位,一个纳米等于10[-9]米,大约是氢原子直径的10倍。纳米技术是从80年代初迅速发展起来的新的前沿科研领域,最终目标是人类按照自己的意志直接操纵单个原子,制造出具有特定功能的产品。
现在纳米技术正从MEMS(微电子机械系统)起步,把传感器、电动机和各种处理器都放在一个硅芯片上而构成一个系统。应用纳米技术研制的计算机内存芯片,其体积不过数百个原子大小,相当于人的头发丝直径的千分之一。纳米计算机不仅几乎不需要耗费任何能源,而且其性能要比今天的计算机强大许多倍。
目前,纳米计算机的成功研制已有一些鼓舞人心的消息,惠普实验室的科研人员已开始应用纳米技术研制芯片,一旦他们的研究获得成功,将为其他缩微计算机元件的研制和生产铺平道路。 互联网络继续蔓延与提升
今天人们谈到计算机必然地和网络联系起来,一方面孤立的未加入网络的计算机越来越难以见到,另一方面计算机的概念也被网络所扩展。二十世纪九十年代兴起的Internet在过去如火如荼地发展,其影响之广、普及之快是前所未有的。从没有一种技术能像Internet一样,剧烈地改变着我们的学习、生活和习惯方式。全世界几乎所有国家都有计算机网络直接或间接地与Internet相连,使之成为一个全球范围的计算机互联网络。人们可以通过Internet与世界各地的其它用户自由地进行通信,可从Internet中获得各种信息。
回顾一下我国互联网络的发展,就可以感受到互联网普及之快。近三年中国互联网络信息中心(CNNIC)对我国互联网络状况的调查表明我国的Internet发展呈现爆炸式增长,2000年1月我国上网计算机数为350万台,2001年的统计数为892万台,翻一番多;2000年1月我国上网用户人数890万;2001年1月的统计数为2250万人,接近于3倍;2000年1月CN下注册的域名数为48575,2001年1月的统计数为122099个,接近于3倍;国际线路的总容量目前达2799M,8倍于2000年1月的351M。
人们已充分领略到网络的魅力,Internet大大缩小了时空界限,通过网络人们可以共享计算机硬件资源、软件资源和信息资源。“网络就是计算机”的概念被事实一再证实,被世人逐步接受。
在未来10年内,建立透明的全光网络势在必行,互联网的传输速率将提高100倍。在Internet上进行医疗诊断、远程教学、电子商务、视频会议、视频图书馆等将得以普及。同时,无线网络的构建将成为众多公司竞争的主战场,未来我们可以通过无线接入随时随地连接到Internet上,进行交流、获取信息、观看电视节目。
移动计算技术与系统
随着因特网的迅猛发展和广泛应用、无线移动通信技术的成熟以及计算机处理能力的不断提高,新的业务和应用不断涌现。移动计算正是为提高工作效率和随时能够交换和处理信息所提出,业已成为产业发展的重要方向。
移动计算包括三个要素:通信、计算和移动。这三个方面既相互独立又相互联系。移动计算概念提出之前,人们对它们的研究已经很长时间了,移动计算是第一次把它们结合起来进行研究。它们可以相互转化,例如,通信系统的容量可以通过计算处理(信源压缩,信道编码,缓存,预取)得到提高。
移动性可以给计算和通信带来新的应用,但同时也带来了许多问题。最大的问题就是如何面对无线移动环境带来的挑战。在无线移动环境中,信号要受到各种各样的干扰和衰落的影响,会有多径和移动,给信号带来时域和频域弥散、频带资源受限、较大的传输时延等等问题。这样一个环境下,引出了很多在移动通信网络和计算机网络中未碰到的问题。第一,信道可靠性问题和系统配置问题。有限的无线带宽、恶劣的通信环境使各种应用必须建立在一个不可靠的、可能断开的物理连接上。在移动计算网络环境下,移动终端位置的移动要求系统能够实时进行配置和更新。第二,为了真正实现在移动中进行各种计算,必须要对宽带数据业务进行支持。第三,如何将现有的主要针对话音业务的移动治理技术拓展到宽带数据业务。第四,如何把一些在固定计算网络中的成熟技术移植到移动计算网络中。
面向全球网络化应用的各类新型微机和信息终端产品将成为主要产品。便携计算机、数字基因计算机、移动手机和终端产品,以及各种手持式个人信息终端产品,将把移动计算与数字通信融合为一体,手机将被嵌入高性能芯片和软件,依据标准的无限通信协议(如蓝牙)上网,观看电视、收听广播。在Internet上成长起来的新一代自然不会把汽车仅作为代步工具,汽车将向用户提供上网、办公、家庭娱乐等功能,成为车轮上的信息平台。
跨入新世纪的门槛,畅想未来之时,我们不妨回顾本世纪人们对计算机的熟悉。1943年IBM总裁Thomas Wason说“我认为全世界市场的计算机需求量约为五台”。1957年美国PrenticeHall的编辑撰文“我走遍了这个国家并和许多最优秀的人们交谈过,我可以确信数据处理热不会热过今年”。1968年IBM的高级计算机系统工程师的微晶片上注解“但是……它究竟有什么用呢?”。1977年数字设备公司的创始人和总裁Ken Olson说“任何人都没有理由在家里放一台计算机”。愿我们的所言也将被证实是肤浅的、保守的。