那是因为你在定义a的时候就错了, 无符整形数就是不带符号的意思, 而你定义了一个符号, 这样编译器就不会把-100赋给a,而是让a发生一个类型转换, a是无符号的 -100是有符号的整形数,因此发生一个类型转化,-100被转化为了无符整数(但是它绝对不是变成了100)然后复制给a,这是为啥呢?继续往下看
你printf中 是用的是%d, 这个转换说明符的意思是把数据以有符号十进制的形式打印出来,
signed int(编译器允许简写为int)是有符整形数,他的字节不能少于2个,现在的操作系统基本上把它设置为4个字节, 对于4个字节的int 它的取值范围是-2147483647到2147483647,
对于unsigned int,他依然是4个字节,但是他的取值范围是0到4294967295,
对于signed int他是将unsigned int的0到2147483647表示为 0到2147483647,把2147483648到4294967295表示为-2147483647到-1
所以呢 我刚才说的第一段中的-100并不是变成了100的愿意,他变成了-100对应的那个无符整数,存在a中,然后你用%d把a输出, 由于%d,它又从这个无符的整数转变为-100输出了出来
对于输出unsigned int 应该用%u输出, 如果还有疑问可以继续问我,
温馨提示:答案为网友推荐,仅供参考