发布网友 发布时间:2023-11-03 09:46
共1个回答
热心网友 时间:2023-11-04 01:07
补充一下楼上不确定的地方,以下是C语言的规则:
位字段是有符号和无符号的区别,在声明上不一样。
表达式中,所有小于int类型的整数都会提升为int类型,提升方式是符号位扩展。入参也是一种表达式。
表达式中有数据无法用int表达时,所有数据会提升为unsign int,提升方式是左侧补0。
printf对所以%d对应的入参都当成有符号类型,而不管原类型是什么,例如你提供0xFFFFFFFFU,它会输出-1.
print...it.a 这个表达式的执行过程是:
it.a其实没有真正的值,因为它只有符号位。
it.a提升到int类型,符号位扩展达32个1,值为-1
printf收到数据,解释为int,就是-1
输出-1
当it.a是无符号数时
it.a的值为1
it.a提升到unsign int类型,直接左侧扩展31个0,值为1
printf收到数据,解释为int,就是1
输出1