C语言:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
答案:1 悬赏:20 手机版
解决时间 2021-04-03 07:47
- 提问者网友:欲望失宠
- 2021-04-03 01:07
C语言:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
最佳答案
- 五星知识达人网友:鱼芗
- 2021-04-03 02:11
把最后的printf("%d",sum)改成printf("%u",sum)。
所有大于0x80000000的数用%d输出时,都是负数。追问哦~~如此~~谢谢
还有一个疑问,那这样的话,可以把sum的类型就固定在“int ”型而不改成“unsigned ”型么?为什么?追答可以。不管你把他定义成int还是unsigned,二进制表示是不会变的。仅仅在解释成10进制时有所不同。追问这样..可是如果仅仅把sum定义为整型的话,它在变化过程中所存储的数据的范围不会超过所能存储的整型数据的范围么?这样为什么不会有问题啊?追答所谓溢出,是对十进制来说的。对二进制来说,只有简单的、统一的二进制加法。
0x7F FF FF FF,不论是int还是unsigned,+1都会变成0x80 00 00 00。对int来说,这是负数,对unsigned来说,却是正数。但是万变不离其宗,这个数的二进制值总是0x80 00 00 00。
只要你适应int溢出的规律,那么不管是-2147483648的int值,还是2147483648的unsigned值,你的眼前只有0x80 00 00 00这一个值。
所有大于0x80000000的数用%d输出时,都是负数。追问哦~~如此~~谢谢
还有一个疑问,那这样的话,可以把sum的类型就固定在“int ”型而不改成“unsigned ”型么?为什么?追答可以。不管你把他定义成int还是unsigned,二进制表示是不会变的。仅仅在解释成10进制时有所不同。追问这样..可是如果仅仅把sum定义为整型的话,它在变化过程中所存储的数据的范围不会超过所能存储的整型数据的范围么?这样为什么不会有问题啊?追答所谓溢出,是对十进制来说的。对二进制来说,只有简单的、统一的二进制加法。
0x7F FF FF FF,不论是int还是unsigned,+1都会变成0x80 00 00 00。对int来说,这是负数,对unsigned来说,却是正数。但是万变不离其宗,这个数的二进制值总是0x80 00 00 00。
只要你适应int溢出的规律,那么不管是-2147483648的int值,还是2147483648的unsigned值,你的眼前只有0x80 00 00 00这一个值。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯