// 头文件
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
1.把一个8位二进制数的某一个指定比特位 置 1 或置 0
函数原型:void bit_set(unsigned char *p_data, unsignedchar position, int flag)
函数参数说明:p_data是指定的源数据,position是指定位(取值范围1~8);flag表示是置0还是置1操作
typedef unsigned char uchar;
void bit_set(uchar* p_data, uchar position, int flag) {
assert(p_data != NULL);
assert((position >= 1) && (position <= 8));
int a = 0x1 << (position - 1);
if (flag == 1) {
*p_data |= a;
}
else {
*p_data &= ~a;
}
}
int main() {
uchar num = 10;
bit_set(&num, 2, 0); // 0x10 的第2位置 0 变成 8
printf("%d\n", num);
system("pause");
return 0;
}
2.实现函数右旋,即将"abcdefghi",右移两位变成"hiabcdefg"
// 将最后一个元素提取出来,放到临时变量里
// 其余元素依次往后挪一位
// 将临时变量赋给首元素完成移位一次
void RightLoop(char* str, int len, int n) {
assert(str != NULL);
assert(n < len);
while (n-- > 0) {
int i = len - 1;
char value = str[i];
for (; i > 0; --i) {
str[i] = str[i - 1]; // 从后往前复制
}
str[i] = value;
}
}
int main() {
char arr[1024] = "abcdefghijklmn";
int len = strlen(arr);
RightLoop(arr, len, 5);
printf("%s\n", arr);
system("pause");
return 0;
}
3.有一个字符串“12345”, 将其转化成 十进制的12345
int Change(char* str) {
assert(str != NULL);
int len = strlen(str), value = 0;
for (int i = 0; i < len; i++) {
value *= 10;
value += str[i] - '0';
}
return value;
}
int main() {
char arr[1024] = "12345";
int ret = Change(arr);
printf("%d\n", ret);
system("pause");
return 0;
}