哪位C语言高手帮忙解释一下(*(long*)&wiegand[0]) <<= 1;的意思。

看了一楼的回答,答案有点偏移了,wiegand[]是一个一维数组它的定义是这样的:staticuchardatawiegand[3];而(*(long*)&wiegand... 看了一楼的回答,答案有点偏移了,wiegand[]是一个一维数组它的定义是这样的:
static uchar data wiegand[3];
而(*(long*)&wiegand[0]) <<= 1;根据程序我估计它是想把整个数组数据左移1位,然后取出wiegand[0]的值,至于中间的运算转换过程不太理解,哪位能帮忙解释一下?
展开
 我来答
sun_siliang
2010-10-27 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4507万
展开全部
&wiegand[0] 意思就是取wiegand[0]和地址;
(long*)&wiegand[0] 意思就是将地址转为整型指针;
(*(long*)&wiegand[0]) 意思就是取指针所指单元的内容,这里表达式等价于wiegand[0];
(*(long*)&wiegand[0]) <<= 1意思就是将wiegand[0])左移一位.
将我可以用下面的程序来验证:
#include <stdio.h>
void main()
{
int wiegand[4]={5,2,3,4};
printf("%d\n",(*(long*)&wiegand[0])<<=1 );
//上面就是输出wiegand[0],其值为5,左移一位(相当于乘2)的值应该是10.
//本例没有涉及二维数组,因此楼上的2位说法是错误的.
}
zhxnlove
2010-10-27 · TA获得超过156个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:81.6万
展开全部
就是去wiegand[0][0]的值左移一位,也就是乘以2啦。

&wiegand[0],取二维数组首地址,即为wiegand[0][0]的地址;

(long *)强制转换地址类型;

(*(long*)&wiegand[0])取地址的值;

(*(long*)&wiegand[0]) <<= 1; 左移一位,即为乘以2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友56c9cee
2010-10-27 · TA获得超过105个赞
知道答主
回答量:94
采纳率:0%
帮助的人:70.2万
展开全部
看这个 &wiegand[0] 应该是个二维数组的首地址.值应该是wiegand[0][0]的值

(long *) &wiegand[0] 就是强转换成long型
(*(long*)&wiegand[0]) 就是取wiegand[0][0]的值(long型的)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清给我起个名
2010-10-27 · TA获得超过528个赞
知道答主
回答量:50
采纳率:100%
帮助的人:23万
展开全部
楼上的错了,看清楚好不好,是字符型数组啊,3个字符共24位,强制转换为32位长整型,整体左移,数组每个数都会被乘以2。
#include <stdio.h>
main()
{
static unsigned char wiegand[3]="123";
(*(long*)&wiegand[0]) <<= 1;
printf("%c\n",wiegand[0]); printf("%d\n",wiegand[0]);printf("%d\n",'1');
printf("%c\n",wiegand[1]);printf("%d\n",wiegand[1]);printf("%d\n",'2');
printf("%c\n",wiegand[2]);printf("%d\n",wiegand[2]);printf("%d\n",'3');
}
你可以自己试一试,首位bit溢出,有个乱码,1的ASCLL码为49,乘以2后为98,对应的字符为b,所以“123”乘以2后的字符为“bdf”
对应码制(十六进制):313233H
转换后为00626466H,
但是wiegand[0]输出的是Jc,不是b。可能是强制地址类型转换后,首地址以及补码的原因造成的,我在想一想
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式