一.对于uint32_t,uint16_t和uint8_t之间的相互转化,以及uint16_t的高低位互换,bit->int转换等
一.说明:
左移:从二进制的角度看现象,就是左移几位就在右边添几个0。
从逻辑上来讲左移n位就是乘以2的n次方了。
右移:从二进制角度看,则是在左边填0,右边去除移动的位数的位 。
(如遇到时1>>1, 便是0.);
(注意:如果操作数是一个正数,那么左边的空缺位使用0补,
如果操作数是一个负数,那么左边的空缺位使用1补)
从逻辑上来讲右移就是除以2的n次方;
二.说明:
将某位置0 a&=~(1<<x);
将某位置1 a|=(1<<x);
取反某位 a^=(1<<x)
向某地址写入 *(*int ) a=0x12302312;
#include <stdio.h>
#define u8 short int
#define u16 long int
#define u32 long long
int main()
{
u8 a[2] = { 0xcd, 0xe2 };
u16 b;
b=a[0];
b=b<<8;
b=b|a[1];
u8 a[2] = { 0 };
u16 b = 0xc32d;
a[1] = b >> 8;
a[0] = b & 0xff;
u8 a[2] = { 0xab, 0xcd };
u16 b;
b= a[0] | a[1] << 8;
int i = 4;
u32 a=0x1234abcd;
u8 b[4];
b[0] = a >> 24;
b[1] = (a >> 16)&0xff;
b[2] =( a >> 8)&0xff;
b[3] = a &0xff ;
while (i--)
{
printf("0x%02x\n", b[i]);
}
int i = 4;
u32 a;
u8 b[4] = {0xcf,0xb3,0x43,0xbb};
a = (long long)b[3] << 32;
a = b[0] << 24|b[3];
a =a|(( b[1]&0x00ff)<<16);
a = a | ((b[2] & 0x0000ff) <<8);
printf("0x%02x\n", a);
int i = 2;
u32 a = 0x1234abcd;
u16 b[2];
b[0] =( a >>16);
b[1] = a &0xffff;
while (i--)
{
printf("0x%02x\n", b[i]);
}
int i = 2;
u32 a ;
u16 b[2] = {0xa1cb,0x2bea};
a=b[0]<<16;
a = b[1] |( b[0]<<16);
printf("0x%02x\n", a);
getchar();
}
int int2_bit(int a)
{
int i,bit,size=sizeof(a)*8;
for(i=0;i<size;i++)
{
bit=a&(1<<(size-i-1));
if(bit==1)
pirntf("1");
else
printf("0");
if(i%4==3)
printf(" ");
}
}
int power(int x)
{
int i=1,t=2;
if(x ==0)
t=1;
for(;i<x;i++)
{
t=2*t;
}
return t;
}
int bit_int(char *x)
{ int i=0,n=7,tmp,sum;
for(;i<8;i++,n--)
{
tmp=x[i]*pwer(n);
sum+=tmp;
}
return sum;
}
int ch_sum(int x)
{
int tmp,is=0;
for(int i=0;i<sizeof(x)*8;i++)
{
tmp=1<<i;
if(x&tmp)
{
is++;
}
}
return is;
}
int8_t otcp( uint8_t a)
{
uint8_t b=~a,t=1<<7;
if(a<0)
{
b|=t;
}
return b;
}
u8 a[2] = { 0x6, 0xc };
u16 b;
b=a[0];
b=b<<8;
b=b|(a[1]<<4);
b=b>>4;
printf("0x%0x ",b);
u8 d_k(u8 *databuf)
{ int of=0;
for(int i=0;i<sizeof(datebuf);i++)
{
char c=databuf[i];
if(c==' ')
{
++of;
}
else
{
rxbuf[i-of]=c;
}
}
return rxbuf;
}
char c_buf='a';
int b='a'-'0' ;
printf("0x%0x",b);
printf("\n%d",b);
printf("\n%d",c_buf);