可伸缩定义,一个16位的变量分成2段保存数据

xiaoxiao2021-02-28  65

#include <stdio.h> #include <stdlib.h> #include <string.h> /*转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77745575*/ /*可伸缩定义,一个16位的变量分成2段保存数据/ /**** Definition of macros ****/ typedef unsigned short U16; typedef unsigned char U8; //定义LOW,HIGH各占几位保存 #define DV_LOW_SIZE 8 #define DV_HIGH_SIZE (16 - DV_LOW_SIZE) //=8 //高8位保存HIGH,低8位保存LOW #define DV_LOW_MASK ((1<<DV_LOW_SIZE)-1) //其实就是00FF #define DV_HIGH_MASK (~DV_LOW_MASK) //FF00 //设置 static void dv_set(U16 *temp,U16 value) { *temp = value; } void dv_set_LOW(U16 *temp,U8 LOW) { *temp=(*temp &DV_HIGH_MASK) | (((U16)LOW)&DV_LOW_MASK); } //先清零低8位再设置低8位 void dv_set_HIGH(U16 *temp,U8 HIGH) { *temp=(*temp &DV_LOW_MASK) | (((U16)HIGH)<<DV_LOW_SIZE); } //获取 U8 dv_get_LOW(U16 *temp) { return (*temp &DV_LOW_MASK); } U8 dv_get_HIGH(U16 *temp) { return (*temp >>DV_LOW_SIZE); } // 十进制转换为二进制,十进制数的每1bit转换为二进制的1位数字 char *int_to_bin(unsigned short data) { unsigned int i = 0; int bit_num = sizeof(unsigned short) * 8; char *p_bin = (char*)malloc(sizeof(char)*(bit_num+1)); //char *p_bin = new char[bit_num+1]; p_bin[bit_num] = '\0'; printf("bit_num = %d\n",bit_num); for (i = 0; i < bit_num; ++i) { //p_bin[i] = data << i >> (bit_num-1);//获取第i位 //p_bin[i] = data>> (bit_num-1); p_bin[i] = data&(1<<i);//等价于上面两条语句 if (p_bin[i] == 0) p_bin[i] = '0'; else if (p_bin[i] != 0) p_bin[i] = '1'; /*printf("bit_num = %c\n",p_bin[i]); printf("1<<i = %d\n",1<<i);*/ } return p_bin; } int main() { U16 temp;U16 TEST = 65535; dv_set(&temp,0); dv_set_HIGH(&temp,3); printf("temp = %s\n",int_to_bin(temp)); dv_set_LOW(&temp,7); printf("temp = %s\n",int_to_bin(temp)); printf("temp = %d\n",temp); printf("sizeof(unsigned short) = %d\n",sizeof(unsigned short)); printf("TEST = %s\n",int_to_bin(TEST)); return 1; }
转载请注明原文地址: https://www.6miu.com/read-33092.html

最新回复(0)