linux 位操作c语言
来源:互联网 发布:instsee新域名 编辑:程序博客网 时间:2024/06/07 03:01
Linux 内核 bitops 非原子操作实现。
static inline void set_bit(int bit, volatile unsigned long *addr){ unsigned long mask = BIT_MASK(bit); unsigned long *p = ((unsigned long *)addr) + BIT_WORD(bit); *p |= mask;}static inline void clear_bit(unsigned int bit, volatile unsigned long *addr){ unsigned long mask = BIT_MASK(bit); unsigned long *p = ((unsigned long *)addr) + BIT_WORD(bit); *p &= ~mask;}static inline void change_bit(unsigned int bit, volatile unsigned long *addr){ unsigned long mask = BIT_MASK(bit); unsigned long *p = ((unsigned long *)addr) + BIT_WORD(bit); *p ^= mask;}static inline inttest_and_set_bit(unsigned int bit, volatile unsigned long *addr){ unsigned int res; unsigned long mask = BIT_MASK(bit); unsigned long *p = ((unsigned long *)addr) + BIT_WORD(bit); res = *p; *p = res | mask; return (res & mask) != 0;}static inline inttest_and_clear_bit(unsigned int bit, volatile unsigned long *addr){ unsigned int res; unsigned long mask = BIT_MASK(bit); unsigned long *p = ((unsigned long *)addr) + BIT_WORD(bit); res = *p; *p = res & ~mask; return (res & mask) != 0;}static inline inttest_and_change_bit(unsigned int bit, volatile unsigned long *addr){ unsigned int res; unsigned long mask = BIT_MASK(bit); unsigned long *p = ((unsigned long *)addr) + BIT_WORD(bit); res = *p; *p = res ^ mask; return (res & mask) != 0;}
0 0
- linux 位操作c语言
- C语言 位操作
- C语言位操作
- C语言位操作
- C语言位操作
- C语言位操作
- C语言位操作
- c语言位操作
- C语言位操作
- c语言位操作
- C语言-位操作
- C语言位操作
- C语言位操作
- C语言位操作
- C语言位操作
- c语言位操作
- C语言 位操作
- C语言位操作
- Samba配置文件常用参数详解
- 大朋m2 UI处理方法
- 愤怒的小鸟(NOIP2016提高组Day2T3)
- java Socket 长连接 心跳包 客户端 信息收发 demo
- {题解}[jzoj4907]【NOIP2016提高组复赛】蚯蚓
- linux 位操作c语言
- 株洲新程IT 教育 李赞红老师 第八章 Scroller 与平滑滚动
- Oracle基本操作
- 日期计算
- android6.0.1 usb mass storage 配置
- WAMPServer安装失败解决办法
- IOS-Swift 语言初步认识和理解
- HDU1757-A Simple Math Problem,矩阵快速幂,构造矩阵水过
- bootstrap 模态框日期控件datepicker被遮住问题的解决