在数值计算机中,表示法是机器号,计算机只能识别0和1,使用二进制,而在日常生活中,人们使用十进制。“正如亚里士多德很久以前指出的那样,今天十进制的广泛使用只是解剖学事实的结果,即我们大多数人生来就有10个手指。虽然历史上比二进制或三进制晚出现了手指计数(5,10制)的做法。” lt数学发展史>: gt有空。可以看看~,很有意思)。为了便于与二进制的转换,使用了十六进制(2 ^ 4)和八进制(23)。让我们言归正传。有正值和负值,计算机用一个数的最高1字节来存储符号(0为正,1为负)。这是机器编号的原始代码..有了数值的表示,就有可能对对数进行算术运算。但很快发现,用带符号位的原码进行乘除运算是正确的,而在加减运算中出现了问题,如下:假设字长为8bits (1)?10-?( 1 )10?=?( 1 )10?+ ( -1 )10?= ?(0)十(0000001)元?+(1000001)原创?= (1000010)原创?= ( -2 )?显然不正确。因为两个整数相加没有问题,所以发现问题发生在带符号位的负数,除符号位外其余位求逆产生逆码。逆码空的值与原码相同,一一对应。下面是反码的减法:?( 1 )10?-?( 1 )?10=?( 1 )?10+ ( -1 )?10= ?( 0 )10 ?(00000001)?反+(1111110)反?=?(11111111)反?=?( -0 ) ?有一个问题。(1 )10?-?( 2)10?=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?反+(1111101)反?=?(11111110)反?=?( -1 )?正确的问题是(+0)和(-0)。在人们的计算概念中,零和零没有正和负的区别。(印度人最早把零标出来,放入计算。印度数学和以零为单位的十进制计数对人类文明做出了巨大贡献。)于是就引入了补语的概念。负数的补码是逆码加一,正数不变。正数的原码补码也是一样的。在补语中用(-128)代替(-0),所以补语的表达范围是:(-128~0~127)共256。注:(-128)没有对应的原码和补码,(-128) = (100000)补码的加减如下:(1)?10-?( 1 )?10=?( 1 )10?+ ( -1 )10?= ?(0) 10 (0000001)补充?+(1111111)补充?=?(0000000)补充?= ( 0 )?正确(1)?10-?( 2)?10=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?加+(1111110)?化妆=?(11111111)补充?= ( -1 ) ?正确吗??所以complement的设计目的是:????⑵符号位可以和有效值部分一起参与运算,简化了运算规则。⑵减法运算可以转化为加法运算,进一步简化计算机中运算器的电路设计?所有这些转换都是在计算机的最底层进行的,而原始代码则用在了我们使用的汇编、C等其他高级语言中。看完以上,你应该对原码、反码、补码有了新的认识!-85负为1,再计算正85的原码:+85 (1010101)→逐位取反(0101010)→加1(0101011)。
10101011(2)负数的补码:符号位为1,其余位为数的绝对值的原码,逐位取反;然后在整数上加1。
【例2】求-7的补数。
因为给定的数是负数,所以符号位是“1”。
后七位:原码+7 (0000111)→逐位取反(111000) →加1(1111001)。
所以-7的补码是1111001。在数值计算机中,表示法是机器号,计算机只能识别0和1,使用二进制,而在日常生活中,人们使用十进制。“正如亚里士多德很久以前指出的那样,今天十进制的广泛使用只是解剖学事实的结果,即我们大多数人生来就有10个手指。虽然历史上比二进制或三进制晚出现了手指计数(5,10制)的做法。” lt数学发展史>: gt有空。可以看看~,很有意思)。为了便于与二进制的转换,使用了十六进制(2 ^ 4)和八进制(23)。让我们言归正传。有正值和负值,计算机用一个数的最高1字节来存储符号(0为正,1为负)。这是机器编号的原始代码..有了数值的表示,就有可能对对数进行算术运算。但很快发现,用带符号位的原码进行乘除运算是正确的,而在加减运算中出现了问题,如下:假设字长为8bits (1)?10-?( 1 )10?=?( 1 )10?+ ( -1 )10?= ?(0)十(0000001)元?+(1000001)原创?= (1000010)原创?= ( -2 )?显然不正确。因为两个整数相加没有问题,所以发现问题发生在带符号位的负数,除符号位外其余位求逆产生逆码。逆码空的值与原码相同,一一对应。下面是反码的减法:?( 1 )10?-?( 1 )?10=?( 1 )?10+ ( -1 )?10= ?( 0 )10 ?(00000001)?反+(1111110)反?=?(11111111)反?=?( -0 ) ?有一个问题。(1 )10?-?( 2)10?=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?反+(1111101)反?=?(11111110)反?=?( -1 )?正确的问题是(+0)和(-0)。在人们的计算概念中,零和零没有正和负的区别。(印度人最早把零标出来,放入计算。印度数学和以零为单位的十进制计数对人类文明做出了巨大贡献。)于是就引入了补语的概念。负数的补码是逆码加一,正数不变。正数的原码补码也是一样的。在补语中用(-128)代替(-0),所以补语的表达范围是:(-128~0~127)共256。注:(-128)没有对应的原码和补码,(-128) = (100000)补码的加减如下:(1)?10-?( 1 )?10=?( 1 )10?+ ( -1 )10?= ?(0) 10 (0000001)补充?+(1111111)补充?=?(0000000)补充?= ( 0 )?正确(1)?10-?( 2)?10=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?加+(1111110)?化妆=?(11111111)补充?= ( -1 ) ?正确吗??所以complement的设计目的是:????⑵符号位可以和有效值部分一起参与运算,简化了运算规则。⑵减法运算可以转化为加法运算,进一步简化计算机中运算器的电路设计?所有这些转换都是在计算机的最底层进行的,而原始代码则用在了我们使用的汇编、C等其他高级语言中。看完以上,你应该对原码、反码、补码有了新的认识!在数值计算机中,表示法是机器号,计算机只能识别0和1,使用二进制,而在日常生活中,人们使用十进制。“正如亚里士多德很久以前指出的那样,今天十进制的广泛使用只是解剖学事实的结果,即我们大多数人生来就有10个手指。虽然历史上比二进制或三进制晚出现了手指计数(5,10制)的做法。” lt数学发展史>: gt有空。可以看看~,很有意思)。为了便于与二进制的转换,使用了十六进制(2 ^ 4)和八进制(23)。让我们言归正传。有正值和负值,计算机用一个数的最高1字节来存储符号(0为正,1为负)。这是机器编号的原始代码..有了数值的表示,就有可能对对数进行算术运算。但很快发现,用带符号位的原码进行乘除运算是正确的,而在加减运算中出现了问题,如下:假设字长为8bits (1)?10-?( 1 )10?=?( 1 )10?+ ( -1 )10?= ?(0)十(0000001)元?+(1000001)原创?= (1000010)原创?= ( -2 )?显然不正确。因为两个整数相加没有问题,所以发现问题发生在带符号位的负数,除符号位外其余位求逆产生逆码。逆码空的值与原码相同,一一对应。下面是反码的减法:?( 1 )10?-?( 1 )?10=?( 1 )?10+ ( -1 )?10= ?( 0 )10 ?(00000001)?反+(1111110)反?=?(11111111)反?=?( -0 ) ?有一个问题。(1 )10?-?( 2)10?=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?反+(1111101)反?=?(11111110)反?=?( -1 )?正确的问题是(+0)和(-0)。在人们的计算概念中,零和零没有正和负的区别。(印度人最早把零标出来,放入计算。印度数学和以零为单位的十进制计数对人类文明做出了巨大贡献。)于是就引入了补语的概念。负数的补码是逆码加一,正数不变。正数的原码补码也是一样的。在补语中用(-128)代替(-0),所以补语的表达范围是:(-128~0~127)共256。注:(-128)没有对应的原码和补码,(-128) = (100000)补码的加减如下:(1)?10-?( 1 )?10=?( 1 )10?+ ( -1 )10?= ?(0) 10 (0000001)补充?+(1111111)补充?=?(0000000)补充?= ( 0 )?正确(1)?10-?( 2)?10=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?加+(1111110)?化妆=?(11111111)补充?= ( -1 ) ?正确吗??所以complement的设计目的是:????⑵符号位可以和有效值部分一起参与运算,简化了运算规则。⑵减法运算可以转化为加法运算,进一步简化计算机中运算器的电路设计?所有这些转换都是在计算机的最底层进行的,而原始代码则用在了我们使用的汇编、C等其他高级语言中。看完以上,你应该对原码、反码、补码有了新的认识!-85负为1,再计算正85的原码:+85 (1010101)→逐位取反(0101010)→加1(0101011)。
所以-7的补码是1111001。在数值计算机中,表示法是机器号,计算机只能识别0和1,使用二进制,而在日常生活中,人们使用十进制。“正如亚里士多德很久以前指出的那样,今天十进制的广泛使用只是解剖学事实的结果,即我们大多数人生来就有10个手指。虽然历史上比二进制或三进制晚出现了手指计数(5,10制)的做法。” lt数学发展史>: gt有空。可以看看~,很有意思)。为了便于与二进制的转换,使用了十六进制(2 ^ 4)和八进制(23)。让我们言归正传。有正值和负值,计算机用一个数的最高1字节来存储符号(0为正,1为负)。这是机器编号的原始代码..有了数值的表示,就有可能对对数进行算术运算。但很快发现,用带符号位的原码进行乘除运算是正确的,而在加减运算中出现了问题,如下:假设字长为8bits (1)?10-?( 1 )10?=?( 1 )10?+ ( -1 )10?= ?(0)十(0000001)元?+(1000001)原创?= (1000010)原创?= ( -2 )?显然不正确。因为两个整数相加没有问题,所以发现问题发生在带符号位的负数,除符号位外其余位求逆产生逆码。逆码空的值与原码相同,一一对应。下面是反码的减法:?( 1 )10?-?( 1 )?10=?( 1 )?10+ ( -1 )?10= ?( 0 )10 ?(00000001)?反+(1111110)反?=?(11111111)反?=?( -0 ) ?有一个问题。(1 )10?-?( 2)10?=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?反+(1111101)反?=?(11111110)反?=?( -1 )?正确的问题是(+0)和(-0)。在人们的计算概念中,零和零没有正和负的区别。(印度人最早把零标出来,放入计算。印度数学和以零为单位的十进制计数对人类文明做出了巨大贡献。)于是就引入了补语的概念。负数的补码是逆码加一,正数不变。正数的原码补码也是一样的。在补语中用(-128)代替(-0),所以补语的表达范围是:(-128~0~127)共256。注:(-128)没有对应的原码和补码,(-128) = (100000)补码的加减如下:(1)?10-?( 1 )?10=?( 1 )10?+ ( -1 )10?= ?(0) 10 (0000001)补充?+(1111111)补充?=?(0000000)补充?= ( 0 )?正确(1)?10-?( 2)?10=?( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?加+(1111110)?化妆=?(11111111)补充?= ( -1 ) ?正确吗??所以complement的设计目的是:????⑵符号位可以和有效值部分一起参与运算,简化了运算规则。⑵减法运算可以转化为加法运算,进一步简化计算机中运算器的电路设计?所有这些转换都是在计算机的最底层进行的,而原始代码则用在了我们使用的汇编、C等其他高级语言中。看完以上,你应该对原码、反码、补码有了新的认识!-85负为1,再计算正85的原码:+85 (1010101)→逐位取反(0101010)→加1(0101011)。
2、-56的十进制用八位二进制补码如何求?规律是什么,越详细越好,谢谢56D=00111000B,反相=11000111B,加1=11001000B
因此,110001000B是-56D
的8位二进制补码表示。转换成二进制->:按位反转->:加1得到它的二进制补码。
用小数来说:
减一,和加99,效果一样?
100以内,都是一样的。
99是1的补数,100是模。
从8位二进制:
减一加255,效果是一样的。
255是1的补数,二进制数
1
0000
。
找到补码后,可以用“补码”完成减法运算。
原理就是上面提到的“同态”理论。
如果结果的个数太大,超出了256的范围,就是溢出。
溢出,无解。
否定代码+1的方式只是一个没有原理的经验公式。
没有解释-128的补码。因为在8位二进制的情况下,-128没有反码。