我有一个问题需要专家指导:
1. 当将具有short类型的值作为参数传递给printf()函数时,它会自动提升为int类型,因此printf()函数将把该值视为int类型而不是short类型。
2. 因此,short类型基本上是16位宽,即0000000000000000,而int类型是32位宽,即00000000000000000000000000000000。
3. 假设我声明一个名为num的变量,其类型为short,并将其初始化为-32,这意味着short类型的最高有效位将是1,即0000000011100000。
4. 当我将这个值传递给printf()时,它将转换为int类型,因此它将变为00000000000000000000000011100000。
5. 在第4步中,当它被转换为int时,最高有效位为0。
6. 为什么当我使用%hd说明符甚至是%d说明符时,它仍然会提示我输入负值而不是正值?
1. 当将具有short类型的值作为参数传递给printf()函数时,它会自动提升为int类型,因此printf()函数将把该值视为int类型而不是short类型。
2. 因此,short类型基本上是16位宽,即0000000000000000,而int类型是32位宽,即00000000000000000000000000000000。
3. 假设我声明一个名为num的变量,其类型为short,并将其初始化为-32,这意味着short类型的最高有效位将是1,即0000000011100000。
4. 当我将这个值传递给printf()时,它将转换为int类型,因此它将变为00000000000000000000000011100000。
5. 在第4步中,当它被转换为int时,最高有效位为0。
6. 为什么当我使用%hd说明符甚至是%d说明符时,它仍然会提示我输入负值而不是正值?
short
类型转换为int
类型时,Oli 表示确保数字的真实数学值得到保留。在二进制补码和反码中,这意味着进行符号扩展。在原码中,则表示在符号位右侧进行零填充。 - Steve Jessop