(编写中)⭐位操作
二进制数、位、字节
在C语言中,位操作是底层编程的核心技能,特别在Python-C互操作中用于:
- 处理硬件寄存器
- 优化数据存储
- 实现位标志和掩码
二进制表示
int binary = 0b1010; // C99支持的二进制字面量
printf("%d", binary); // 输出: 10
其他进制数
int decimal = 10; // 十进制
int octal = 012; // 八进制 (0开头)
int hex = 0xA; // 十六进制 (0x开头)
int binary = 0b1010; // 二进制 (0b开头, C99+)
C按位运算符
基本位运算符
unsigned char a = 0b10101010; // 170
unsigned char b = 0b11001100; // 204
// 按位与 &
unsigned char and_result = a & b; // 0b10001000 (136)
// 按位或 |
unsigned char or_result = a | b; // 0b11101110 (238)
// 按位异或 ^
unsigned char xor_result = a ^ b; // 0b01100110 (102)
// 按位取反 ~
unsigned char not_result = ~a; // 0b01010101 (85)
移位运算符
unsigned char num = 0b10101010; // 170
// 左移 <<
unsigned char left_shift = num << 2; // 0b1010101000 (680)
// 右移 >>
unsigned char right_shift = num >> 2; // 0b00101010 (42)
位字段
位字段在Python-C互操作中非常有用,可以紧凑地存储多个布尔标志:
// 定义位字段结构
struct StatusFlags {
unsigned int is_ready : 1; // 1位
unsigned int has_error : 1; // 1位
unsigned int error_code : 4; // 4位
unsigned int reserved : 2; // 2位
};
// 使用示例
struct StatusFlags status;
status.is_ready = 1;
status.has_error = 0;
status.error_code = 5; // 最大15 (4位)
对齐特性
内存对齐
#include <stdalign.h>
// 指定对齐要求
alignas(16) double data[4]; // 16字节对齐
// 查询对齐要求
printf("Alignment: %zu\n", alignof(double));
结构体对齐控制
// 紧凑包装(可能降低性能)
#pragma pack(push, 1)
struct PackedData {
char a;
int b;
short c;
};
#pragma pack(pop)
// 或者使用GCC属性
struct __attribute__((packed)) PackedData {
char a;
int b;
short c;
};