int a=65535,int b=-1,printf("%d,%o,%x,%u", a, a, a, a); printf("%d,%o,%x,%u", b,
答案:3 悬赏:50 手机版
解决时间 2021-04-05 15:43
- 提问者网友:我是女神我骄傲
- 2021-04-05 06:29
int a=65535,int b=-1,printf("%d,%o,%x,%u", a, a, a, a); printf("%d,%o,%x,%u", b, b, b, b);结果
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-04-05 07:15
首先要搞清楚不同格式输出是怎么回事
格式字符 意 义
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀0)
x,X 以十六进制形式输出无符号整数(不输出前缀Ox)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数
e,E 以指数形式输出单、双精度实数
g,G 以%f或%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
搞清楚了,就好解释了
第一:对于a=65535,其的二进制为111....1111(16个1),按%d输出,是有符号的,而111....1111(16个1)是-1的二进制(有符号),那么结果就是-1了,%u输出,无符号,结果就对了,111....1111(16个1)的十进制为65535,%o是按八进制输出,111....1111(16个1)的八进制为177777(不会转继续提问吧,查书也行),%x是按16进制输出,111....1111(16个1)的16进制为ffff,就是结果了;
第二:对于b=-1,上面说了,它的二进制也是一样的,为111....1111(16个1),解释上面一样
总结:对于此题,搞清楚每个格式输出的意义,还有就是数字在电脑中的存储形式,为二进制,要求会转换,转换的方法有很多,你去查下吧追问为什么65535的二进制为111....1111(16个1),111....1111(16个1)是-1的二进制,111....1111(16个1)的八进制为177777?有什么简便的方法算出来吗,谢谢追答他们的二进制是一样的,这是计算机的存储方式,正数是以原码存储,负数是以补码存储,就是显示的时候,你选的方式不同,结果就不同,对于111....1111(16个1)转换八进制,最简单的是,从低位开始,向高位每3位为一组,对应是十进制放在相应的位置上,例如111....1111(16个1),
1 111 111 111 111 111
1 7 7 7 7 7
这样就是177777了,其他的都一样,不相信,你可以试试
格式字符 意 义
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀0)
x,X 以十六进制形式输出无符号整数(不输出前缀Ox)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数
e,E 以指数形式输出单、双精度实数
g,G 以%f或%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
搞清楚了,就好解释了
第一:对于a=65535,其的二进制为111....1111(16个1),按%d输出,是有符号的,而111....1111(16个1)是-1的二进制(有符号),那么结果就是-1了,%u输出,无符号,结果就对了,111....1111(16个1)的十进制为65535,%o是按八进制输出,111....1111(16个1)的八进制为177777(不会转继续提问吧,查书也行),%x是按16进制输出,111....1111(16个1)的16进制为ffff,就是结果了;
第二:对于b=-1,上面说了,它的二进制也是一样的,为111....1111(16个1),解释上面一样
总结:对于此题,搞清楚每个格式输出的意义,还有就是数字在电脑中的存储形式,为二进制,要求会转换,转换的方法有很多,你去查下吧追问为什么65535的二进制为111....1111(16个1),111....1111(16个1)是-1的二进制,111....1111(16个1)的八进制为177777?有什么简便的方法算出来吗,谢谢追答他们的二进制是一样的,这是计算机的存储方式,正数是以原码存储,负数是以补码存储,就是显示的时候,你选的方式不同,结果就不同,对于111....1111(16个1)转换八进制,最简单的是,从低位开始,向高位每3位为一组,对应是十进制放在相应的位置上,例如111....1111(16个1),
1 111 111 111 111 111
1 7 7 7 7 7
这样就是177777了,其他的都一样,不相信,你可以试试
全部回答
- 1楼网友:风格不统一
- 2021-04-05 09:40
这个啊,有符号的int型的范围是-32768~32767,无符号的是0~65535。有符号的int数是采用补码表示的,int型是2个字节16位,最高位是符号位,0表示正1表示负。从负数的补码得到真值时,将符号位之外的所有位取反后,再加个1,前面再加个负号得真值。65535的十六进制表示是ffff,即二进制的
- 2楼网友:拜訪者
- 2021-04-05 08:28
int是16位有符号整型,正数在计算机中以原码方式存储,负数则用补码形式存储。
-1是负数,以补码形式存储,即0xffff
65535的原码也是0xffff
所以有这样的结果也就不奇怪了。
补码:保持符号位不变,其他位按位取反(即反码)再加一,即可得到该数的补码
-1是负数,以补码形式存储,即0xffff
65535的原码也是0xffff
所以有这样的结果也就不奇怪了。
补码:保持符号位不变,其他位按位取反(即反码)再加一,即可得到该数的补码
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯