A. 计算机网络的一个习题求解,解答看不懂,题目和解答如下!关于首部检验和的计算。
首部检验的方法是,吧首部分成一些16字的序列,将首部检验置0,然后对这些序列进行反码算数运算。求出来的这个和的反码放入首部检验位(16位)。收到数据报时进行检验:就是把首部再反码求和一遍,然后再取反码,这时应该得到0。
所以说前五行就是首部的前五行。
然后接下来的五行就是,换算成2进制的序列。
将这些序列16位的取反码合(包括和检验字段)得出来首部检验和发送前的值。
0111010001001110
然后再取反码放入首部检验位
1000101110110001
没有算,不过算出来应该就是这样。
反码求和时最高位相加产生进位的话结果要+1.
B. 首部检验和怎么计算
IP首部校验和的计算方法:
把校验和字段清零,对每16位(2字节)进行二进制反码求和, 反码求和的意思是先对每16位求和,再将得到的和转为反码。
IP数据报校验只对首部进行校验,不对数据部分进行校验。把首部看成16位为单位的数字组成,依次进行二进制反码求和,再把结果依次存入校验和字段中即可。
(2)计算机网络反码求和例题扩展阅读:
将发送的进行检验和运算的数据分成若干个16位的位串,每个位串看成一个二进制数,这里并不管字符串代表什么,是整数、浮点数还是位图都无所谓。将IP、UDP或TCP的PDU首部中的检验和字段置为0,该字段也参与检验和运算。
对这些16位的二进制数进行1的补码和(one's complement sum)运算,累加的结果再取反码即生成了检验码。将检验码放入检验和字段中。
其中1的补码和运算,即带循环进位(end round carry)的加法,最高位有进位应循环进到最低位。反码即二进制各位取反,如0111的反码为1000。
C. 原码反码补码计算例题
1)2)3)题因为没有说是几位的所以,没办法写
4)0101001
5)1010010
5)11111011,01011001,11001000
2.不懂
D. 计算机,求反码和原码,详细过程
引入原码
反码
和补码的目的就是为了解决减法问题,因为计算机cpu的运算器中只有加法器,要把减法转化成加法来计算。
举个例子,a表示十进制数“+16”,b表示十进制数“-19”,把这两个数的原码直接相加,得:
a=+16
(a)原=00010000
b=-19
(b)原=10010011
00010000
+
10010011
————
10100011
其结果符号位为1是负数,其数值位为100011,即等于十进制数“-35”,这显然是错的结果。
再比如,十进制数“+16”与“+19”的原码直接相减,得:
00010000
-
00010011
————
11111101
结果为“-125”,这又是错的。
但是引入补码后,加减法都可以用加法来实现,如“-16+11”的运算:
11110000
+
-16的补码
00001011
11的补码
————
11111011
-5的补码
如果是“-16-11”,那么就转化为加法运算“-16+(-11)”
11110000
+
-16的补码
11110101
-11的补码
————
111100101
-27的补码
在字长为8位的系统中,最高位所产生的进位被自然丢弃,运算结果的机器数为11100101,是-27的补码形式,结果正确。
顺便告诉你一些其它的东西:
1.二进制数中,两数的补码之和等于两数和的补码。
2.补码=反码+1
3.反码=原码除符号位外其它数值取反(即该数的绝对值取反),即“0”变“1”,“1”变“0”。
4.任何正数的原码
反码
补码的形式完全相同(即都是自身,不变)
5.在计算机中,有符号的数都是采用补码来表示的。
6.计算的时候,符号位也参与运算。
E. 二进制反码运算是怎么计算的
两个数进行二进制反码求和的运算,它的规则是从低位到高位逐列进行计算。0和0相加是0但要产生一个进位1,0和1相加是1,1和1相加是0。若最高位相加后产生进位,则最后得到的结果要加1。
举例:已知X = + 1101 , Y = + 0110 , 用反码计算Z = X-Y。
[X]反 = 01101
[-Y]反 = 11001
则[Z]反 =[X]反+[-Y]反 = 01101+11001+1(循环进位)= 00111
其真值为Z = +0111
(5)计算机网络反码求和例题扩展阅读:
运算注意事项
1、反码的符号位相加后,如果有进位出现,则要把它送回到最低位去相加(循环进位)。
2、反码运算时,其符号位与数值一起参加运算。
3、用反码运算,其运算结果亦为反码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求反才是其真值。
F. 二进制反码求和是怎样求的
算法实现:
unsigned short ip_fast_csum(unsigned char * iph,
unsigned int ihl)
{
unsigned int sum;
__asm__ __volatile__(
"movl (%1), %0 ; "
"subl , %2 ; "
"jbe 2f ; "
"addl 4(%1), %0 ; "
"adcl 8(%1), %0 ; "
"adcl 12(%1), %0 ; "
"1: adcl 16(%1), %0 ; "
"lea 4(%1), %1 ; "
"decl %2 ; "
"jne 1b ; "
"adcl , %0 ; "
"movl %0, %2 ; "
"shrl , %0 ; "
"addw %w2, %w0 ; "
"adcl , %0 ; "
"notl %0 ; "
"2: ; "
: "=r" (sum), "=r" (iph), "=r" (ihl)
: "1" (iph), "2" (ihl)
: "memory");
return(sum);
}
(6)计算机网络反码求和例题扩展阅读
二进制反码求和工作原理 :
0和0相加是0,但要产生一个进位1,0和1相加是1,1和1相加是0.若最高位相加后产生进位,则最后得到的结果要加1。
(0)反 + (0)反 = 1 + 1 = 10
(1)反 +(0)反=0+ 1 =1
(1)反 + (1)反 = 0 + 0 = 0
G. 二进制反码求和运算
加数不需要取反,直接按0和0为0,0和1为1,1和1为0并向前进1,最后将最高位后的额外进位加到前面所得的部分和中,结果就是二进制反码求和
H. 计算机原码反码补码的两道题
正数的反码和补码都与原码相同,负数的反码为对该数的原码除符号位外各位取反,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1,由上可知1、110101的原码反码和补码都是00110101,-101101的原码是10101101,反码是11010010,补码是11010011,2、x=-127D是指十进制的-127转换成二进制原码为11111111,反码为10000000,补码为10000001
I. 反码算术运算求和
不是,是把里面的数据按照16位依次取出,然后按照反码算数运算求和,也就跟正常加法一样,只不过如果最高位有进位则最终结果要加一,然后再求其反码即可
J. 原码,反码和补码三码的计算.最好给下例题.谢谢
正(整)数按自然表示,负数以补码表示,正数按位取反再加1得它的补码,同理,负数也可以这样运算得到它的正数表示。
实际上这个方法是以1000 0000(以8位为例)为分割正负数的界线,故而可以说没有符号位。
44)d=0010 1100,
0010 1100按位取反,
得1101 0011,
再加1,得到:
11010100,
此即(-44)d。