c语言数组左移?

2024-11-29 11:55:52
推荐回答(5个)
回答1:

“ (a[PosOut] << 8) | 0x00ff”表示先把a数组中第PosOut位置的数值按位左移8位,再将得到的结果和0x00ff做逻辑或操作。例如,a[2]=3,用二进制表示是”11“,那么它左移8位得到二进制”11 0000 0000“,再和0x00ff即”1111 1111“做逻辑或操作,得到二进制”11 1111 1111“也就是十进制的1023,即c[2]=1023。
c[0] = (1<<8)|0x00ff = 二进制的"1 0000 0000"和”1111 1111“进行逻辑或 = 二进制的”1 1111 1111“ = 十进制的511。
其他c[PosOut]也是类似的分析。

回答2:

这个应该是数据的向左移8bit
int型数据类型一般为32bit
示例数组a中的第一个元素,即a[0]=1,其16进制形式为0x0001,所以将其向左移8bit即变成0x0100,再或0x00FF,即变成0x01FF=511
以此类推:第二个元素经过运算变为0x2FF=767,第三个元素经过运算0x3FF=1023,第三个元素经过运算0x4FF=1279

回答3:

1、a[PosOut] << 8:a[PosOut]左移8位,等价于a[PosOut]乘2的8次方,就是a[PosOut]*256
2、| 0x00ff:低8位全置1,因上一步左移后低8位全为0,因此等价于+255
3、c[PosOut] = (a[PosOut] << 8) | 0x00ff 等价于 c[PosOut] = a[PosOut]*256+255
结果没毛病

回答4:

//下面是将数组左移的函数void fun(char *a, int *length)//length为字符串a的长度{ for(int i = 0; i < length - 2; i++) { a[i] = a[i+2]; }*length = (*length) - 2; } //如果只是输出左移两位的结果,可以用下面这个函数void fun(char *a, int length){ for(int i =2; i < length; i++) { printf("%c",a[i]); }}

回答5:

a数组某个下标的元素左移8位,再和0X00ff或运算,把结果赋值给c数组同下边的元素