提取字节中的某一位,num为要提取的字节,n为要提取字节中的第n位,返回置位第n位的值
// 提取 uint8_t 数值的第 n 位(索引从 0 开始,最低位为0) unsigned char get_bit(unsigned char num, unsigned char n) { // 1. 输入验证:确保 n 在 0~7 范围内 if (n > 7) return 0xFF; // 错误处理(根据需求调整) // 2. 位操作:右移 n 位后与 1 按位与,提取目标位的值 return (num >> n) & 0x01; }写入某一位到字节中,num为要写入的字节,position为要写入的第n位,value为要写入位的值(0或1)
// 设置指定位的函数 unsigned char setBit(unsigned char num, unsigned char pos, unsigned char val) { // 确保 pos在 0~7 范围内 if (pos > 7) return num; //将num的第pos位清零,其他位保持不变 num &= ~(1 << pos); // 根据val的值(非0则1,0则0)左移pos位,然后与num进行或运算,从而将第pos位设置为val的值。 //这里利用了(val != 0)得到一个布尔值(0或1),然后左移pos位,这样就在第pos位上放置了0或1。 num |= ((val != 0) << pos); return num; }