您的位置:首页 > 其它

软件基本概念(以概念点的形式展开,不断补充中…)

2012-04-26 19:31 267 查看



1.计算机为什么使用二进制

因为电子计算机内部只有两个状态,比如通电和不通电(更专业的说法是:计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。)

2.计算机存储单位

位(bit):

电子及计算机最小的存储单位是一个二进制位,(bit),简写是b,1位只有两个值0或1(废话,二进制可不就2个值么...)。

字节(byte):

因为位这个单位太小,所以就设计了字节这一概念,(byte),简写是B,规定1个字节是8位,即1B=8b。

再大一些的单位一次是KB(KiloByte)、MB(MegaByte)、GB(GigaByte)、TB(TeraByte)、PB(PetaByte)、EB(ExaByte)、ZB(ZettaByte)、YB(YottaByte)各单位间的进制都是2的10次方,也就是1024(好熟悉呀,CLer飘过…)1KB=1024B,1MB=1024KB,以此类推。

说个实际问题,买U盘或硬盘的时候,比如160G硬盘,硬盘厂商使用的进制是1000,不是1024,所以160GB硬盘容量格式化以后大概只有(160*1000*1000*1000)/1024/1024/1024≈149GB。(可见无商不奸啊~)

3.进制的概念

现在最常用的进制是十进制,以前应该有其他的进制,比如“半斤八两”就反映了古代一斤等于16两的概念,也就是十六进制。

基数:

就是一种进制中组成的基本数字,例如二进制是0和1,八进制是0~7,十进制是0~9,16进制是0~9、A~F(大小写均可)。

运算规则:

以十进制来说就是“满十进一,借一当十”这个大家都懂的,不多说~

进制间转换:

二进制转十进制(二转十,下边都简写了)


比如:[1011]2=(1*20)+(1*21)+(0*22)+(1*23)=1+2+0+8=11
[0.1101]2=(1*2-1)+(1*2-2)+(0*2-3)+(1*2-4)=0.5+0.25+0+0.0625=0.8125
十转二
比如: 13转成二进制
商 余
13 / 2 = 6 6 1
6 / 2 = 3 3 0
3 / 2 = 1 1 1
1 / 2 = 0 0 1
结果就是1101
二转八
二转八的方法是三位一并,从右侧开始,每3位二进制数字转为八进制的一位,
比如:10 100 110 010 转八进制
10 100 110 010
2 4 6 2
结果是[2462]8
八转二
基本就是二转八倒过来,要记住0~7对应的二进制数

二进制
八进制
000
0
001
1
010
2
011
3
100
4
101
5
110
6
111
7
二转十六
二转十六的方法是四位一并,从右侧开始,每4位二进制数字转为八进制的一位,
比如:101 0011 0010转十六进制
101 0011 0010
5 3 2
结果是[532]16
十六转二
二转十六倒过来,要记住0~9、A~F对应的二进制数

二进制
十六进制
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
A
1011
B
1100
C
1101
D
1110
E
1111
F
如果是八、十、十六之间转,我会先转成二进制,然后在转成需要的进制
4.计算机内部的数据表达
整数的表达:
整数有正负,计算机内部只能存0和1,所以将符号数字化,用二进制码的最高位表示符号位,规定该位0代表正,1代表负。
计算出的二进制形式,都称作整数的原码,为了计算方便,存储和运算时都采用了补码的格式。
正数:规定正数的原码,反码和补码都是其本身。

8
原码
反码
补码
00001000
00001000
00001000
00001000
负数:负数的原码,最高位存储符号位,其他位存储数值;

负数的反码,是指符号位不变,其他位取反;

负数的补码,是指在反码的数值位上加1,运算后得到的结果,只计算数值位,不改变符号位;

-8
原码
反码
补码
10001000
10001000
11110111
11111000
规律:补码的补码等于负数的原码。

注:小数(浮点数)的存储形式和整数不同

字符的表达

字符指计算机内部单个的符号(包括标点符号、英文字母和汉字等等),计算机无法直接表达,所以就对每个字符进行了编号,例如a(注意是小写a)的字符编号是97,b字符编号为98等等。(常用的还有A编号65)

由于需要编号的字符很多,就专门为此规定了字符集,常见的字符集有ASCII,GB2312等。在计算机内部存储、运算、传输时,只需要使用该编号。

字符在程序内部可以参与运算,参与运算的就是这个字符的编号,字符集规律是很多字符变换逻辑实现的基础。
5.网络编程基础
WHAT 什么是网络编程

网络编程的本质就是两个设备(计算机,手机、pad等移动终端)之间的数据交换,现在的网络编程基本都是基于请求/响应方式的,也就是一个设备请求把数据发送给另一个设备,另一个设备接收并反馈数据。

在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序叫做服务器(Server)。客户端在需要的时候启动,发送请求;而服务器为了能够时刻响应连接,需要一直启动。以打工商银行语音电话为例,我们自身是客户端,工商银行的语音系统是服务端,拿起电话拨打95588就类似是向服务器发出请求。

连接一旦建立,客户端和服务器就可以进行数据传递了,在一些程序中,程序既有客户端功能也有服务器功能,像是电驴,迅雷,(用的时候边下载边上传嘛~)

IP地址和域名

在现实生活中,如果要打电话则需要知道对方的电话号码,寄信要知道收信人的地址,在网络通信中也是这样,需要知道一个设备的位置,则需要使用该设备的IP地址。

IP地址是一个规定,现在使用的是IPv4,即由4个0~255之间的数字组成,在计算机内部存储时只需4个字节即可。在计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该计算机可以有多个不同的IP地址,在同一个网络内部,IP地址不能相同。

由于IP地址不方便记忆,所以又专门创造了域名的概念,其实就是给IP取一个字符的名字,例如sina.com,sohu.com等,IP和域名之间存在一定的对应关系,如果IP是身份证,域名就是你的姓名。其实在网络中只能使用IP地址进行数据传输,所以在传输前,需要把域名转换为IP,这个由DNS的服务器专门来完成。

所以在网络编程中,可以用IP或域名来标识网络上的一台设备。

端口

为了在一台设备上可以运行多个程序,人为的又设计了端口的概念,类似的例子是公司内部的分机号码。

规定一个设备有2的16次方(65536)个端口,每个端口对应一个唯一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于0~1024之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号。

使用端口号,可以找到一台设备上唯一的一个程序。

所以如果需要和某台计算机建立连接的话,只需要知道IP地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。

数据传输方式

知道了如何建立连接,接下来就是如何传输数据了,不管是有线传输还是无线传输,数据传输就两种方式,TCP和UDP。

TCP

<!--[if !supportLists]-->1 <!--[endif]-->TCP(Transfer Control Protocol)

(这个我也不懂是神马意思啦...反正先抄过来,学网络的(CCNA,CCNP)的应该懂吧..)

这个TCP传输控制协议方式,是一种稳定,可靠的传送方式,只需要建立一次连接,就可以多次传输数据。很像是打电话,只需拨一次号,就可以实现一直通话,如果你说的话不清楚(服务器没有收到请求),对方会要求你重复(重新发请求),保证传输的数据可靠。

这种方式的优点是稳定可靠,缺点是建立连接和维持连接的代价高,传输速度不快。

UDP

<!--[if !supportLists]-->1 <!--[endif]-->UDP(User Datagram Protocol)

这个UDP也叫用户数据报协议方式,该传输方式不建立稳定的链接,每次发送数据都直接发送。类似于发短消息,发送多条短息的话,就需要多次输入对方的号码。该传输方式不可靠,数据有可能收不到,系统只保证尽力发送。

该种方式的优点是开销小,传输速度快,缺点是数据有可能会丢失。

在实际的网络编程中,要根据需要选择任何一种传输方式,或组合使用这两种方式实现数据传递。(多扯一句,QQ的网络数据传输这两种方式都用到了)

协议的概念

协议(protocol)是网络编程中一个非常重要的概念,指的是传输数据的格式。因为在网络中传输的信息是各种各样的,但在程序中得到的都是一组数值,如何去读这些数值呢?需要提前规定好数据的格式,在客户端按照该格式生成发送数据,服务器端按照该格式阅读该数据,然后再按照一定的格式生成数据反馈给客户端,客户端再按照该格式阅读数据。类似发电报,发电报的内容要转换成特定的编码。

图:协议--格式转换图

一般程序的协议都分成客户端发送的数据格式,以及服务器端反馈的数据格式,客户端和服务器都遵循该格式生成或处理数据,实现两者之间的复杂数据交换。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: