二进制数最高位是符号位,正数最大为011111111111,即为1023,01111111111对应的负数补码为连同符号位求反加1,为10000000001
即为:-1023,10000000001不是最小,再减1为10000000000,即为-1024
随便一个负数:比如-4的补码为:1100,-5的补码为:1011
-4-1=-5
1100-1=1011
二进制数最高位是符号位,正数最大为011111111111,即为1023,01111111111对应的负数补码为连同符号位求反加1,为10000000001即为:-1023,10000000001不是最小,再减1为10000000000,即为-1024
随便一个负数:比如-4的补码为:1100,-5的补码为:1011
-4-1=-5
1100-1=1011
这个问题,不用算,分析一下即可得出这个结论。
11 位二进制,共有 2^11 = 2048 个不同的代码。
用补码形式代表有符号数时,就分成两个相等的部分,各有 1024 个。
用一半代表负数,即:-1~-1024。
用一半代表 0 和正数,即:0~1023。
综合,其表示范围,就是-1024~+1023。
-----------------------
因为-1024 并没有 11 位的原码和反码。
所以,用“取反加一”求补码,就无处下手。
但是,补码,就是补码。与原码反码,毫无关系。
求补码,不需要走“原码反码符号位取反加一”这条路。
按照“补码的定义式”,一步,就求出来了。
补码的定义式如下:
X >= 0, [X]补 = X;
X < 0, [X]补 = 模-|X|。
式中: 模=2^n, n 是二进制的位数。
11 位补码,模就是 2^11 = 2048,所以:
[-1024]补=2048-1024 = 1024。
如果你还需要二进制,你就自己转换一下:
1024 = 100 0000 0000(二进制)。
求补码,不要用“原码反码符号位取反加一”。
“原码反码符号位取反加一”这方法,就是个大坑。
42486(10) = 1010010111110110(2) Unsigned
1010010111110110(2) Signed = -(101101000001001+1)(2)
= -23050(10)
-----------
(1)正数的补码:与原码相同。 例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。
-----------
LZ很不厚道耶....你的题目明明问的是"结果是什么?",又不要结果....
你要的是什么程序?
输出的程序吗?