【1】请编码实现以下功能的函数
功能:实现对一个8 bit数据(unsigned char类型)的指定位(例如第n位)的置0或者置1操作,并保持其他位不变。
函数原型:
void bit_set(unsigned char *p_data, unsigned char position, bool flag)
函数参数说明:
p_data 是指定的源数据,position是指定位(取值范围1~8);flag表示是置0还是置1操作,true: 置1 flase:置0
二进制位的转换可以利用位运算进行:
0000 0001B | 0000 00 10B=0000 0011B
0000 0001B & ~(0000 0001)B =0000 0000B
代码;
void bit_set(unsigned char *p_data, unsigned char position, bool flag)
{
if(flag)
{
//置1
*p_data |= (0x01<<(position-1));
}
else
{
//置0
*p_data &= ~(0x01<<(position-1));
}
}
void main()
{
unsigned char value = 10;
unsigned char pos = 3;
bool flag = false;
bit_set(&value, pos, flag);
}
【2】
将给定的一个数组进行换位操作,例如;arr[6]={1,2,3,4,5,6},k=3(将后三位进行移动后)arr[6]={4,5,6,1,2,3}.
将数组a ={ 1 2 3 4 5 6 } 分解为a1={1 2 3}, a2={4 5 6},
将各自数组进行对调;a1={3 2 1},a2={6,5,4},
再合并对调,a={3 2 1 6 5 4} -> {4 5 6 1 2 3}
即可完成操作。
代码
void rotate(int* nums, int numsSize, int k)
{
k %= numsSize;
for(int i=0; i<k; ++i)
{
int tmp = nums[numsSize-1];
for(int j=numsSize-1; j>0; --j)
{
nums[j] = nums[j-1];
}
nums[0] = tmp;
}
}
void main()
{
int ar[] = {1,2,3,4,5,6,7,8};
int n = sizeof(ar) / sizeof(ar[0]);
rotate(ar, n, 3);
}