c语言中-4的无符号输出为什么是65532?(0分)

  • 主题发起人 主题发起人 qpnet
  • 开始时间 开始时间
Q

qpnet

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