项目需要,写了一个取出8位变量的2bit数据,引发了思考!
文章目录
- 如题
- 代码 & 截图
如题
项目开发中,在DTC故障码这一块,需要取出8位变量的2bit数值,我临时写了一个也能解决,在和供应商工程师讨论的过程中,发现这种方式不够优雅,于是我总结了几种写法方式!
代码 & 截图
#include <stdio.h>
#include <stdbool.h> #define BINARY_01010101 85 // 十进制表示unsigned char g_testData = BINARY_01010101;
unsigned char g_read2BitTestData = 0;
unsigned char g_read2BitTestData3 = 0;
unsigned char g_read2BitTestData4 = 0;
bool g_read2BitTestData2 = 0;int main(int argc, char *argv[])
{// printf("Hello C-Free!\n");g_read2BitTestData = (g_testData & (1 << 2));printf("g_read2BitTestData的十进制数值为:%d\n", g_read2BitTestData);g_read2BitTestData2 = (bool)g_read2BitTestData;printf("方式一:g_read2BitTestData2的十进制数值为:%d\n", g_read2BitTestData2);g_read2BitTestData3 = (g_testData & (1 << 2)) != 0;printf("方式二:g_read2BitTestData3的十进制数值为:%d\n", g_read2BitTestData3);g_read2BitTestData4 = (g_testData >> 2) & 0x01; // 0000 0001printf("方式三:g_read2BitTestData4的十进制数值为:%d\n", g_read2BitTestData4);return 0;
}
我最初是用g_read2BitTestData2 这种方式实现的,后来觉得g_read2BitTestData3和g_read2BitTestData4这种方式都比较优雅,因为g_read2BitTestData2 实际上是将4转化为bool型为1了,而g_read2BitTestData3和g_read2BitTestData4直接就是bool型,转不转化都行!