
c++初学者求高手解答一个问题
执行下列语句后变量y的值是多少,请解释unsignedshortx=-1;inty=x+1;...
执行下列语句后变量y的值是多少,请解释
unsigned short x = -1;
int y = x + 1; 展开
unsigned short x = -1;
int y = x + 1; 展开
展开全部
unsigned short x = -1; // x表示为16进制是0xFFFF
int y = x + 1; // 表示成16进制就是0xFFFF + 0x0001 = 0x00010000,也就是65536
int y = x + 1; // 表示成16进制就是0xFFFF + 0x0001 = 0x00010000,也就是65536
展开全部
每种类型都是有取值范围的,unsigned short 类型的变量的取值范围是从0到很大的某个数字,具体多少忘记了,自己去查,所以把一个-1的值赋给这个类型,他会自动转为unsigned short 类型,这个是循环的,-1就变成最大值,同样的道理用在int上,自己去看看变量的取值范围再算吧
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实不管什么类型,当字节数确定时,一个数在内存中存储的格式是一定的。在一般的WIN32系统上,short是2字节的,-1存储在内存中就是0xffff。当你指定它为unsigned short时,它的值就是0xffff=65535,于是y=65536;当你指定它为short时,0xffff表示的就是-1
追问
-1在unsigned short中的值不是16个1么 那他加上1不就变成1后面17个0了? 为什么是65536?
追答
加上1以后是1后面16个0,这个数就是65536
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果等于65536。计算机内部表示数的方式是以补码的形式保存的,那么16位二进制数-1在计算机中的表示方式是1111111111111111,第一位按符号位算,那么强制将其转换成无符号的短整型,计算机将这16位的二进制数认为是正数的原码(正数原码和补码一样),是2^16=65535,再加1就是65535
更多追问追答
追问
为什么11111111111111111会转变为2^16?
追答
应该是2^16-1=65535
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
编程一做就出来了。何必问别人。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-09-24
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询