程序员教程[第二版]学习笔记(一)

今年下半年的软考报名时间截止到9月10号。现在我还不清楚要不要报名,因为怕公司的项目进度紧而影响了复习进度。不管是否参加软考,作为一名刚毕业的程序员,我也应该掌握软考考试大纲的知识点。

我看的教材是程序员教程第二版。

第一章是计算机系统基础知识

我不是计算机专业的,再加上在学校学习的不多,书上的很多内容对于我来说新知识。我很渴望知识~~这次的学习笔记是一个很白的菜鸟学习,见笑了!!


上图为计算系统的组成示意图。

我对存储器的认识仅仅只是一部分,在这里附上百科的存储器介绍:http://baike.baidu.com/view/87697.htm

机器数有几种编码方法(这里假设机器的字长为n):

1、原码:最高位是符号位,其余n-1位表示数值的绝对值

2、反码:最高位是符号位。正数的反码和原码相同,负数的反码n-1位是其绝对值按位取反

3、补码:最高位是符号位。正数的补码和原码相同,负数的补码n-1位=反码+1

4、移码:[X]移与[X]补的关系是符号位互为相反数

汉字编码分为以下3类:

1、数字编码(区位码)【GB2312】。在这里附上编码对照表链接 http://www.knowsky.com/resource/gb2312tbm.htm 

2、拼音码

3、字型编码

这里介绍下区位码、国标码与机内码的转换关系

(1)区位码先转换成十六进制数表示 ;

(2)(区位码的十六进制表示)+2020H=国标码; 

(3)国标码+8080H=机内码      (国标码的2个字节最高位置1)

例如  汉字“大”

区位码 2083  ------>1453H(区位码)----->3473H(国际码)-------->B4F3H (机内码)

码距是校验码中的一个重要概念,它指的是一个编码系统中任意两个合法编码之间至少有多少个二进制位不同。4位的8421码的码距为1,码距为1的编码方法既不能查错也不能纠错。

下面介绍3种校验码:

1、奇偶校验码

[转]  源地址:http://blog.csdn.net/joulechen/article/details/5932626

对数据传输正确性的一种校验方法。在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。

具体方法如下:
奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。

       大家一定会问,如何计算奇偶性呢,在计算机内有一种特殊的运算它遵守下面的规则:
1+1=0; 1+0=1; 0+1=1; 0+0=0;我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。而使用上面方法进行的校验称为奇校验,奇校验只能判断传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。
Odd Parity(奇校验),校核数据完整性的一种方法,一个字节的8个数据位与校验位(parity bit )加起来之和有奇数个1。校验线路在收到数后,通过发生器在校验位填上0或1,以保证和是奇数个1。因此,校验位是0时,数据位中应该有奇数个1;而校验位是1时,数据位应该有偶数个1。如果读取数据时发现与此规则不符,CPU会下令重新传输数据。 奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。 如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。 同理偶校验的过程和奇校验的过程一样,只是检测数据中“1”的个数为偶数。

在这里附上实现代码(C):

bit PARITY_odd(uint8_t *pData)
{
	uint8_t datapos, bitpos, chtmp;
	uint8_t dataLen = strlen(pData);
	bit parityFlag = 1;


	for(datapos = 0; datapos < dataLen; datapos++)
	{
		chtmp = *(pData + datapos);

		for(bitpos = 0; bitpos < 8; bitpos++)
		{
			if((chtmp & 0x01) == 0x01)
			{
				parityFlag ^= 1;
			}
			chtmp <<= 1;
		}
	}

	return parityFlag;
}
bit PARITY_even(uint8_t *pData)
{
	return !PARITY_odd(pData);
}

2、汉明码  貌似不常用,这里不做介绍

3、循环冗余校验码(CRC)  以后深入再具体介绍



  • 3
    点赞
  • 1
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

heycare

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值