求计算过程和具体分析1230955824762727572727224722

解释及输出如下:
第一条printf
%12hd是以十进制方式输出整形,长度为12,-901有4位,所以左侧补8个空格
%12hu是以十进制方式输出无符号整数,长度12,
901的二进制为:0000 0011 1000 0101
取反: 1111 1100 0111 1010
-901的二进制: 1111 1100 0111 1011 ---16进制:FC7B
无符号值就是 15*16^3+12*16^2+7*16+11=64635
64635占5位,左侧补7个空格
所以,整体输出为:
(1)num1=口口口口口口口口-901,num1=口口口口口口口64635
第二条printf
%#12ho是以8进制输出整数,前面补一个0,总长度12,不足位左侧补空格
-901的二进制: 1111 1100 0111 1011
改写为3位一组:1 111 110 001 111 011
8进制即为: 1 7 6 1 7 3
#的意思是在左侧补齐标志位,也就是多输出一个0,即为0176173,占7位,左侧补5个空格
%12hx是以16进制输出,总长度12,数字中的字母用小写字母,-901的十六进制上面算了,是fc7b,占4位,左侧补8个空格。
所以,整体输出为:
(2)num1=口口口口口0176173,num1=口口口口口口口口fc7b
第三条printf
%12.1E是以科学计数法输出浮点型,12是总长度,1是小数点后的位数,后面的四舍五入。
在不同的编译器中,这个输出略有不同。稍后说明。
%12.0f是以浮点型输出,小数点后占0位,也就是只保留整数,小数点后四舍五入。2023.103保留整数后即为2023,占4位,左侧补齐8个空格。
%12.1E的第一种情况:%E使得float提升为double类型输出,此时E后面默认3位数字,即E+003,所以输出结果为:
(3)num2=口口口口2.0E+003,num2=口口口口口口口口2023
%12.1E的第二种情况:精确区分float和double,num2作为float输出,此时E后面默认2位数字,即E+03,所以输出结果为:
(3)num2=口口口口口2.0E+03,num2=口口口口口口口口2023