C语言,int n= -62;n=((char*)&n)[2];此时n的值是多少?[2]在这里表示什么含义?

RT,请详细解释,... RT,请详细解释, 展开
 我来答
投资慢步
2009-12-20 · 超过13用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:36.6万
展开全部
这个看起来比较有意思,我觉得具体等于多少应该跟机器的大小端表示有关系。
-62的补码为0xFFFFFFC2,我们常用的x86的机器一般都是小端模式,因此,低字节存放在低地址端。
因此,对于n=((char*)&n)[2],其实是将n对应的地址强制转换成char *类型的,也就是有符号单字节的类型,而[2]的意思就是在这个地址的基础上增加两个字节的地址。

由于在x86的机器上是按照小端模式存放的,因此&n对应的地址上的字节为0xC2,增加两个字节后的地址处为0xFF。

由于char为带符号的,因此,从char向int的转换过程中,是带符号的转换,也就是说,在赋值之后,n == 0xFFFFFFFF,也就是 -1 。
如果把n=((char*)&n)[2]换成n=((unsigned char*)&n)[2],那么结果的 n == 0x000000FF,也就是 255 。
txyluffy
2009-12-20 · TA获得超过671个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:149万
展开全部
此时n 为 0xff 一个字节的char 型数.

用printf打印出来就是-1,即0xff就是-1的补码.

&n将指向n在内存中的地址,n 是一个整型数,十六进制是0xFFFFFFC2,此为其补码,占有四个字节.

(char *)&n 强制类型转换,将这个地址转换成一个字符数组,即有四个字节的字符数组.

[2]即取这个数组的第三个元素,就是11111111,打印出来即为-1.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式