[问题] 补数

楼主: mater2004 (mater)   2015-06-24 23:30:52
short n=12
n的二进制值为 0000000000001100
~n运算后变为 1111111111110011
问题
为何1111111111110011在十进制是 -13
short范围-32768到32767
我觉得应该是很靠32767的一个值
作者: kdjf (我抓得到什么呢?)   2015-06-24 23:37:00
32767=b0111111111111111喔
作者: softseaweed (Gladys von Wackenheim)   2015-06-24 23:37:00
补数可把第一个bit当做sign bit, 1代表负 0代表正况且那串不会很靠近32767,2^15就32768,后面还一串
楼主: mater2004 (mater)   2015-06-24 23:45:00
32767为何是0111111111111111阿? 有什么规则定的吗?我刚算了一下 这样就是-13 头怎不是从000000000000000开始呢
作者: softseaweed (Gladys von Wackenheim)   2015-06-24 23:47:00
你知道二进制怎么做的吗? 位值记数法?
楼主: mater2004 (mater)   2015-06-24 23:49:00
不知道 刚看不久而已
作者: softseaweed (Gladys von Wackenheim)   2015-06-24 23:51:00
那你先把位值记数法跟二进制搞懂后再来看补数...
楼主: mater2004 (mater)   2015-06-24 23:56:00
我不懂你说的是什么? google找不太到,如果是计算转换我会。
作者: softseaweed (Gladys von Wackenheim)   2015-06-25 00:05:00
你会转换怎么会不知道为何32767=b0111111111111111简而言之 二补数不用想太多 最左边的bit若是1该数就是负的,若是0该数就是零或正的若是正数或零就跟一般二进制一样换算即可负数请先NOT过后加1就会得到相对应的二进制值换算该值后在前面加上一个减号就是你要的数字了正数转负数也是NOT过后+1
楼主: mater2004 (mater)   2015-06-25 00:14:00
我知道我哪里弄错了,你还告诉我另一个东西。谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com