【c语言数据结构】已知 long i=32768;执行 printf("%d",i)||已知 long i=65539;执行语句printf("%d",i)
答案:2 悬赏:20
解决时间 2021-02-17 11:54
- 提问者网友:战魂
- 2021-02-16 15:05
【c语言数据结构】已知 long i=32768;执行 printf("%d",i)||已知 long i=65539;执行语句printf("%d",i)
最佳答案
- 二级知识专家网友:孤独入客枕
- 2021-02-16 15:45
楼主完全不用管二进制的。
printf("%d",i)%d是输出十进制,而long i=32768,32768本来就是十进制了,直接输出就可以了。
具体解答一下楼主下面的疑问
1、32768的二进制不是1000 0000 0000 0000。long i=32768,使用的是long类型存放,long类型占用4个字节,所以32768不止这么长,前面还有一堆0了。
0000 0000 0000 0000 1000 0000 0000 0000
这才是32768的二进制表示方法,最高位是0,并不是1。
如果定义成short i =32768的话,输出就是-32768了。
2、用%d输出是按照i的类型来输出,i占用4个字节,就使用4个字节输出。输出全部0000 0000 0000 0001 0000 0000 0000 0011,既不是0000 0000 0000 0001,也不是0000 0000 0000 0011。
追问:谢谢你哦。如果定义int 为2字节,long为4字节呢?
追答:%d 就是根据后面给定的变量的类型来输出的。如果int是2个字节,后面给了一个int类型的变量,那就是按照2个字节来输出。
追问:那这样的话,long是4字节,int是2字节,i的二进制是0000 0000 0000 0000 1000 0000 0000 0000 占4个字节,然后按照2个字节输出,请问应该是取哪两个?我不懂小字节这块内容,老师没讲,书上没说,而且我不是计算机专业的,,,可是考试的题目里有。。。
追答:这个不用考虑大小字节序的问题。
长字节向短字节强制转换时,都是取地位。4字节向2字节转换,2字节获取的是4字节的地2字节。
不管当前设备是字节序如何。
printf("%d",i)%d是输出十进制,而long i=32768,32768本来就是十进制了,直接输出就可以了。
具体解答一下楼主下面的疑问
1、32768的二进制不是1000 0000 0000 0000。long i=32768,使用的是long类型存放,long类型占用4个字节,所以32768不止这么长,前面还有一堆0了。
0000 0000 0000 0000 1000 0000 0000 0000
这才是32768的二进制表示方法,最高位是0,并不是1。
如果定义成short i =32768的话,输出就是-32768了。
2、用%d输出是按照i的类型来输出,i占用4个字节,就使用4个字节输出。输出全部0000 0000 0000 0001 0000 0000 0000 0011,既不是0000 0000 0000 0001,也不是0000 0000 0000 0011。
追问:谢谢你哦。如果定义int 为2字节,long为4字节呢?
追答:%d 就是根据后面给定的变量的类型来输出的。如果int是2个字节,后面给了一个int类型的变量,那就是按照2个字节来输出。
追问:那这样的话,long是4字节,int是2字节,i的二进制是0000 0000 0000 0000 1000 0000 0000 0000 占4个字节,然后按照2个字节输出,请问应该是取哪两个?我不懂小字节这块内容,老师没讲,书上没说,而且我不是计算机专业的,,,可是考试的题目里有。。。
追答:这个不用考虑大小字节序的问题。
长字节向短字节强制转换时,都是取地位。4字节向2字节转换,2字节获取的是4字节的地2字节。
不管当前设备是字节序如何。
全部回答
- 1楼网友:荒野風
- 2021-02-16 17:18
2、如果在32位平台上,输出仍是32768,D正确;如果是在16位机上输出是-32768,B正确。
3、如果在32位平台上,输出仍是65539,A正确;如果是在16位机上输出是3,C正确。
追问:为什么呀?能结合二进制给我讲讲吗??
追答:对于第二题:
如果是32位int平台,那么32768、65539都还远小于int能表达的最大数,所以写什么就输出什么。这就不用多说了。对于16位int平台,int能表示的最大整数是32767,即二进制0
3、如果在32位平台上,输出仍是65539,A正确;如果是在16位机上输出是3,C正确。
追问:为什么呀?能结合二进制给我讲讲吗??
追答:对于第二题:
如果是32位int平台,那么32768、65539都还远小于int能表达的最大数,所以写什么就输出什么。这就不用多说了。对于16位int平台,int能表示的最大整数是32767,即二进制0
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯