因为旁悔%d是按有符号的int整轿启稿型输出的,unsigned char和unsigned short转成signed int型,前面都会补0,即0x000000ff和0x0000ffff,所以都是正数,而unsigned long和unsigned int转完后是0xffffffff,闭孝所以是-1。你如果用%u打印就都是正数了。