// 頭文件
#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;
}