某机器中码字长15位(包括信息位和海明校验位),采用了可纠正一位错的海明校验。识码字位从左到右用b1, b2…b15编号,其海明校验方程式为
b1?b3?b5?b7?b9?b11?b13?b15=0
b2?b3?b6?b7?b10?b11?b14?b15=0
b4?b5?b6?b7?b12?b13?b14?b15 =0
b8?b9?b10?b11?b12?b13?b4?b15=0
若在选项中给出的码字最多只有一位错,那么第2位b2错的码字为 (29) ;无错的码字为 (30)

单选题 A.010100101111110 B.000100101101010
C. 010111011101010 D.011011101101010
【正确答案】 B
【答案解析】
单选题 A.101111010110111 B.001111010001000
C.001111010000111 D. 001011010011100
有以下C程序:
char fun (char x, char y)
{ if(x)return y;
main( )
{ int a ='9', b ='8', c ='7';
printf("% c/n", fun(fun(a,b), fun(b,c)));
【正确答案】 C
【答案解析】[解析] 从题中给出的海明校验的方程式可知:
若码字无错,则将其相应位代入4个校验方程式的左边,计算后应有尽有全为“0”;
若只是一位错,仔细观察校验方程式的构成可见,b1只出现在第1个校验方程中,因而会使其值由“0”变为“1”,而其余3个方程的值仍为“0”,若将4个校验方程的值由下至上排列为0001,正好是二进制值1,同样,b2只出现在第2个校验方程中;若只有b2值,则4个校验方程的值由下至上排列后为0010,正好是十进制值2。这可得到bi(i=0,2,…,15)一位错,代入校验方程左边求值,并由下至上排列后正好是i的二进制值。
以问题(1)中A选项为例,计算校验方程的左边的值:
b1=0, b2=0, b3=0, b4=1, b5=0, b6=0, b7=1, b8=0,
b9=1, b10=1, b11=0, b12=1, b13=0, b14=1, b15=0,
分别代入4个校验方程的左边得到:
0?0?0?1?1?0?0?0=0
0?0?0?1?1?0?1?0=1
1?0?0?1?1?0?1?0=0
0?1?1?0?1?0?1?0=0
计算第(29)题各项:
A.“010100101100010”(1100)2=12,第12位b12错。
B.“000100101101010”(0010)2=2,故第2位b2错。对于其他供选择的答案可进行类似的计算得到4个校验方程左边的值。
C.“010100111101010”(1000)2=8,第8位b8错。
D.“010101101101010”(0110)2=6,第6位b6错。
计算第(30)题各项:
A.“101111010000111”(0001)2=1,第1位b1错。
B.“001111010001111”(1100)2=12,第12位b12错。
C.“001111010000111”(0000)2=0,无错。
D.“001011010000111”(0100)2=4,第4位错b4。