位操作和宏
来源:互联网 发布:万维网域名续费 编辑:程序博客网 时间:2024/05/16 17:33
位操作和宏
1.进制
十进制: 111 = 1*10^2 + 1*10^1 + 1*10^0
八进制: o111 = 1*8^2 + 1*8^1 + 1*8^0
十六进制:0x111 = 1*16^2 + 1*16^1 + 1*16^0
二进制: 111 = 1*2^2 + 1*2^1 + 1*2^0
1个字节 = 8个位
二进制权位: 1 1 1 1
8 4 2 1
十六进制 <=============转换 =============> 二进制
0xCBCD C=8+4 B=8+2+1 C=8+4 D=8+4+1 1100 1011 1100 1101
位运算符
左移运算<< unsigned char var=0x8a; var<<2 = 0x28 8a:10001010 00 char 类型最多存8位,最左边的10溢出舍去
右移运算>> unsgined char var=0x8a; var>>2 = 0x22 8a:100010
左移运算<< unsigned short var=0x8a; var<<2 = 0x228 8a:10001010 00
右移运算>> unsgined short var=0x8a; var>>2 =0x22
左移右移运算执行效率比乘法除法执行运算高
位运算
unsigned short var;
对var完成以下操作: bit[0…7]
将bit[7]设置为1: var |= (1<<7);
将bit[7]设置为0: var &= ~(1<<7)
将bit[7]反转: var ^= (1<<7);
将bit[7:4]4个位设置为1: var |= 0xF0; var|=(0xF<<4)
将bit[7:4]4个位设置为0: var &= 0F; var &= ~(0xF<<4)
将bit[7:4]4个位反转: var ^= (0xF<<4)
将bit[7:4]设置为1010: var |= (5<<5); var&= ~(5<<4);
查看bit[7]的值: (var>>7) & 1
查看bit[7:4]的值: (var>>4) & 0xF
查看bit[6:5]的值: (var>>5) & 0x3
虚拟地址到物理地址的映射
位字段
位字段(bit field)是一个signed int或unsigned int中一组相邻的位。位字段由一个结构体声明建立,该结构体声明为每个字段提供标签,并决定字段的宽度,例如:
struct gpio_bit{ unsigned int gpb0:2; unsigned int gpb1:2; unsigned int gpb2:2; unsigned int gpb3:2; unsigned int gpb4:2; unsigned int gpb5:2;} ;
如果声明的总数超过了一个unsigned int大小,那么会使用下一个unsigned int的存储位置。这时不允许一个字段跨越两个unsigned int之间的边界。
位域:冒号后面数字代表几位
宏
简单的替换,写宏时不要忘记加()
#define MAX_STUDENTS 10#define ADD(a, b) a+b //#define ADD(a, b) ((a)+(b))#define MUL(a,b) a*b //#define MUL(a,b) ((a)*(b))
for(i=0; i<MAX_STUDENTS; i++) ..... var = 5 * ADD(3, 4) //5*3+4=19 var = MUL(3+4, 5) //3+4*5=23
#if 0 /*注释在这里*/ 一会要编译,一会不想编译的代码。#endif
#include <stdio.h> 与 #include "stdio.h" 区别
<>:系统头文件下找,没找到报错,系统的代码 “”:系统头文件下找,没找到再在当前找,用于自己写的代码 头文件内容放到c文件下来
//避免头文件重复包含的问题:
#ifndef_TEST_H#define_TEST_Hstruct a{ lll}#endiftest.h_TEST_H#define_TEST_Hstruct a{ lll}
- 位操作和宏
- C 宏和位操作
- 整型提升 和 位操作
- 位操作技巧和总结
- 位操作基础和技巧
- 逻辑操作符和位操作符
- 位操作 << >> & | ^ ~和 关系操作符
- PHP中的按位与和按位或操作
- C语言结构、联合、位操作、位域和枚举
- 位操作,获取和设置特定位的值,效率
- 位操作/指针和数组/字符串
- 位操作和一些题目总结
- 位操作(C和指针)
- 位运算的常见操作和题目
- ARGB中右移和按位与操作
- C语言之内存和位操作
- 常用位域操作宏
- java 按位操作符和移位操作符
- 认识和使用JavaScript库
- 开始游戏按钮点击后干了什么
- 复合数据类型
- Mac OS 任意显示器 开启HiDPI方法
- Spring总结之IOC原理
- 位操作和宏
- JVM内存分析工具——HProf
- How to bootstrap two angular apps in one asp.net mvc application
- Java随笔(持续更新中,想到什么写什么,各种冷知识黑科技小技巧)
- LaTeX常用语法总结
- Linux基础重点补充——第一关
- VMware通过samba和Ubuntu虚拟机共享文件
- [django]在删除文章所关联的分类的时候,属于该分类的文章都被删除了。
- 【LeetCode 35】Search Insert Position(Python)