Q qpnet Unregistered / Unconfirmed GUEST, unregistred user! 2004-03-19 #1 printf("%u",-4); 值为65532怎么算的??
Q qpnet Unregistered / Unconfirmed GUEST, unregistred user! 2004-03-19 #2 负数是用补码表示的! -4 用两进指表示-0000,0000,0000,0100; 那么表示成系统能识别的就是取反加一 1111,1111,1111,1011 再加一 那就是65532
S sfen Unregistered / Unconfirmed GUEST, unregistred user! 2004-03-19 #3 负数应该是用补码表示的,%u应该是两字节的unsigned int,从0-65535,如果表示有符号的两字节int是-32768--32767,-1..-32768就对应65535..32768,加减法运算的时候,都按加法算,如-4+4=0,就是65532+4=35536,用两字节表示,当然是0了。
负数应该是用补码表示的,%u应该是两字节的unsigned int,从0-65535,如果表示有符号的两字节int是-32768--32767,-1..-32768就对应65535..32768,加减法运算的时候,都按加法算,如-4+4=0,就是65532+4=35536,用两字节表示,当然是0了。
B balary Unregistered / Unconfirmed GUEST, unregistred user! 2004-03-31 #4 没错啊,最简单的想法就是该类型的最大无符号型的值减去 -4 就可以了. 你说的int是65536 - 4 那么就是 65532了.
刘 刘麻子 Unregistered / Unconfirmed GUEST, unregistred user! 2004-03-31 #5 这并不奇怪,是把 '-4'按照补码编码后,再当作无符号数 显示出来就是这样。。学过汇编吗?