c++用printf函数输出数据格式附。。不明白为什么输出结果是那样的。。如图。 5
2个回答
展开全部
不同的编译器int的长度不同,有的32位,有的16位,在这里是16位
unsigned int(无符号整形),int(有符号整形)在计算机中都占16位,能够表示
的数字范围都是0x0000~0xffff(这里用16进制表示),但是这些数字的所表示的数
不一样,无符号整形对应的范围是0~65535(2^16-1),有符号整形的范围为:
-32768至32767,即-2^15至(2^15-1)
负数以补码的形式存储在计算机中,负数补码的计算方式,如x负数,第一步取x的绝对值,第二步计算x的二进制,第三步对二进制取反,最后在加1,最后得到的二进制形式即是负数x的存储形式。
d有符号十进制 o八进制 x十六进制 u无符号十进制
65535的16进制0xffff,八进制177777,在计算机中存储的内容就是二进制
0x1111111111111111(16个1,后面用16进制表示)转换成有符号数就是-1,
过程:0xffff首位是1是负数,因此这是补码,转换成真值就是上面过程的逆过程
0xffff -> 0xfffe(减1) ->0x0001(取反)->1(绝对值)-> -1(加负号)
-2的二进制的计算:是负数就计算补码 -2 ->2(绝对值)->0x0002(二进制:这里用十六进制表示)->0xfffd(取反)->0xfffe(加1)
在计算机-2的存储就是补码0xfffe 八进制177776 无符号数65534(就是0xfffe对应的数)
unsigned int(无符号整形),int(有符号整形)在计算机中都占16位,能够表示
的数字范围都是0x0000~0xffff(这里用16进制表示),但是这些数字的所表示的数
不一样,无符号整形对应的范围是0~65535(2^16-1),有符号整形的范围为:
-32768至32767,即-2^15至(2^15-1)
负数以补码的形式存储在计算机中,负数补码的计算方式,如x负数,第一步取x的绝对值,第二步计算x的二进制,第三步对二进制取反,最后在加1,最后得到的二进制形式即是负数x的存储形式。
d有符号十进制 o八进制 x十六进制 u无符号十进制
65535的16进制0xffff,八进制177777,在计算机中存储的内容就是二进制
0x1111111111111111(16个1,后面用16进制表示)转换成有符号数就是-1,
过程:0xffff首位是1是负数,因此这是补码,转换成真值就是上面过程的逆过程
0xffff -> 0xfffe(减1) ->0x0001(取反)->1(绝对值)-> -1(加负号)
-2的二进制的计算:是负数就计算补码 -2 ->2(绝对值)->0x0002(二进制:这里用十六进制表示)->0xfffd(取反)->0xfffe(加1)
在计算机-2的存储就是补码0xfffe 八进制177776 无符号数65534(就是0xfffe对应的数)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
%d int 接受整数值并将它表示为有符号的十进制整数,i是老式写法
%o unsigned int 无符号8进制整数(不输出前缀0)
%u unsigned int 无符号10进制整数
%x unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
printf("a = %d,%o,%x,%u",a,a,a,a); 应该输出 a = 65535,177777,ffff,65535,你的图片是错的
printf("b = %d,%o,%x,%u",b,b,b,b); 应该输出 b = -2,37777777776,fffffffe,4294967294,你的图片是错的
%o unsigned int 无符号8进制整数(不输出前缀0)
%u unsigned int 无符号10进制整数
%x unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
printf("a = %d,%o,%x,%u",a,a,a,a); 应该输出 a = 65535,177777,ffff,65535,你的图片是错的
printf("b = %d,%o,%x,%u",b,b,b,b); 应该输出 b = -2,37777777776,fffffffe,4294967294,你的图片是错的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询