第3个回答 2010-10-27
楼上的错了,看清楚好不好,是字符型数组啊,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。可能是强制地址类型转换后,首地址以及补码的原因造成的,我在想一想