首页 > 试题广场 >

下列代码运行的结果( s

[单选题]
下列代码运行的结果(
short i=65537;
int j=i+1;
printf("i=%d,j=%d\n",i,j);
  • i=65537,j=65538
  • i=1,j=2
  • i=-1,j=0
  • i=1,j=65538
short占两个字节,65537的二进制表示为:1 00000000 00000001,short i = 65537时,发生了溢出,i取16bit,为1。所以
i=1,j=2
发表于 2017-01-27 17:38:01 回复(0)
记住65536 相当于 unsigned short  的0值。
发表于 2017-06-08 21:49:09 回复(0)
short i;
i取值范围-32768~32767
若i不在-32768~32767范围内:
i=-32768+(i-32768)%65536;
i=65537  ==>i=1
i=32768  ==>i=-32768
发表于 2017-01-05 21:45:09 回复(0)
本题考察两个知识点:第一,任何一个数据都有一个范围,若超出范围,则从头开始计数,如char i=128;(i=-128);第二,隐式类型转换,混合运算中若出现不同类型数据进行运算时,进行隐式类型转换成相同类型,转换原则就是小->大,有符号->无符号。
发表于 2017-08-06 16:41:18 回复(0)
给short赋值的时候已经溢出了,取16bit后是1,所以后面的int i也就不要指望是65537了。。
(*^_^*)
then speak loudly
what is the result one added to one?
编辑于 2017-12-02 20:18:30 回复(0)
1.存储short类型的数据需要2个字节,也就是2*8bit=16位,其取值范围是(-32768~32767)
2.65537超出了short的取值范围,其二进制表示为:1 00000000 00000001,short i=65537时,发生了溢出,只取后16位,也就是1
3.i=1;j=2;
发表于 2017-05-05 15:12:09 回复(0)
short占2字节,范围为-32768-32767,故65537超过了其范围,其值为(short)65537=65537%65536=1
发表于 2016-12-30 21:04:07 回复(0)
short占两个字节,65537的二进制表示为:1 00000000 00000001,short i = 65537时,发生了溢出,i取16bit,为1。所以
i=1,j=2
发表于 2018-12-25 15:42:13 回复(0)

C++ Primer P33当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数
当我们赋给带符号类型一个超出它范围的值时,结果是未定义的。
发表于 2019-04-28 08:29:58 回复(0)
java表示并没有unsigned short,
short赋值超过-32768~32767就会报错,
java还是屏蔽这种题吧,很多概念和C相反容易记混,到时候做笔试碰见C/C***的就让实验室学C的看一下。
发表于 2018-01-12 11:48:25 回复(0)
short赋值时就被截断成1,后边运算都是以1为基础进行的
发表于 2017-12-27 09:04:09 回复(0)
***,难道还要记住各种类型的取值范围吗?
发表于 2017-10-02 12:44:46 回复(1)

和上次一个家伙讲的溢出之后溢回来有点差别,short占两个字节,65537的二进制表示为:1 00000000 00000001,short i = 65537时,发生了溢出,i取16bit,为1
j为新开辟的一块栈内存,把i的值+1传过去

发表于 2017-08-30 14:36:13 回复(0)
i=65537-32768-32768=1
发表于 2017-04-26 19:07:56 回复(0)
b,short最大值是65535,溢出了
发表于 2017-03-20 21:49:25 回复(0)
short占两个字节,65537的二进制表示为:1 00000000 00000001,short i = 65537时,发生了溢出,i取16bit,为1。所以
i=1,j=2
发表于 2017-03-10 21:38:44 回复(0)
服了,明明选对了,提交后答案就变了
发表于 2017-02-22 18:39:01 回复(0)