首先,要说明一下unsigned int和int在内存上的大小实际上是一致的。
区别在于int的最高位是符号位,即最高位如果是1,说明这个数字是负数。如果最高位是0,说明这个数字是正数。
而unsigned int是没有符号的,所以最高位可以和其他位用于计数功能。
现在结合一下具体的例子。
假如有一段内存上是这样的数据 1000 0000 0000 0001。
如果你认为这是一个unsigned int ,那么这个数字会被认为是32769
如果你认为这是一个int,那么这个数字会被认为是 -1
根据图片中的代码
b = -8
虽然b是无符号的变量,但是-8可以被解释成最高位是1的一个无符号整数。
所以该值被记录到了b中。
当调用printf时,由于%d是用于表示int类型的,是包含符号的。b的最高位就被解释成符号。输出为-8
如果你想输出无符号的数字,可以使用%u,这样程序在解析b时,会将它作为无符号整数进行解析。
如果我的回答能够帮助到你,希望能够请采纳我的回答。
追问%u是表示什么
追答以无符号整数形式输出数据。
本回答被提问者采纳