C 语言中获取某一位、按位拼凑数据、低字节高字节数据获取示例

#include <stdio.h>
#include <stdint.h>
#include <math.h>
void  tos1(int a1_, int s2_) {

	int a = 0;
	a = a1_ + s2_;
	printf("aaaaa\r\n %d---%d ,%s", a, s2_,"222");
}

void method1() {
	int8_t a;
	uint8_t a2;
	int16_t b1;
	uint16_t b2;

	int32_t  c1;
	uint32_t c2;
	uint_fast32_t;

	a = 129;
	a2 = 257;
	b1 = 32768;
	b2 = 65536;

	typedef uint8_t u8;

	typedef uint16_t u16;

	typedef uint32_t u32;

	typedef int8_t s8;

	typedef int16_t s16;

	typedef int32_t s32;

	u16 u1 = 256;

	signed char ch1 = 129;
	unsigned char ch2 =257;
	 char ch3 = 'A';
	//ch1 = '2';
	//ch2 = 3;

	 float ls = pow(2, 8);
	 char  str1[] = "你好啊,C语言。";
	 u8 L1 = 0x08;
	 u8 L4 = 0x02;
	 u8 L2 = 0xA1;
	 u8  LS[5] = {0xA1, 0x1A,0xB2, 0x09,0xF8};

	 int size_1 = sizeof(LS) / sizeof(LS[0]);
	 printf("0x%d \t0x%d ", !!(L1 & 0x01), !!(L1 & 0x02));

	printf("-----a=%d,a2=%d,b1=%d,b2=%d,u1=%d\n c1=%c, c2=%d, ls=%f, str=%s, L1=%d, \n",a,a2,b1,b2, u1, ch1,ch2 , ls, str1);
	for (int i = 0; i < size_1; i++)
	{
		
		if (LS[i] & L1){
			/*printf("0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t", !!(LS[i] & 0x01), !!(LS[i] & 0x02), !!(LS[i] & 0x03), !!(LS[i] & 0x04), !!(LS[i] & 0x05),!!(LS[i] & 0x06),
				!!(LS[i] & 0x07), !!(LS[i] & 0x08));*/
			printf("%d 输入是%d\n", LS[i], LS[i] & L1);
		}
		if (LS[i] & L4) {
			/*printf("0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t", !!(LS[i] & 0x01), !!(LS[i] & 0x02), !!(LS[i] & 0x03), !!(LS[i] & 0x04), !!(LS[i] & 0x05),!!(LS[i] & 0x06),
				!!(LS[i] & 0x07), !!(LS[i] & 0x08));*/
			printf("%d 输入是%d\n", LS[i], LS[i] & L4);
		}
		//查看某个数据的每一位值
		printf("->0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d \t0x%d<- \t", !!(LS[i] & 0x01), !!(LS[i] & 0x02), !!(LS[i] & 0x03), !!(LS[i] & 0x04), !!(LS[i] & 0x05), !!(LS[i] & 0x06),
			!!(LS[i] & 0x07), !!(LS[i] & 0x08));

		printf(" 当前数据:%d,%d\n", LS[i],i);
		
	}

	int bits = sizeof(char*);
	printf("\n-当前电脑是多少位系统-bits=%s\n", bits ==8?"64位系统—>" :"其他位系统%d");

	// 将某个值拆分为低8位和高8位
	int16_t speed1 = 10000;
	int8_t s_d_ = speed1; //低八位:取8位值数据
	int8_t s_g_8 = speed1 >> 8; // 高8位:是将整个数值向右移8位,然后再取8位值数据
	printf("speed1原值:%d;speed1低字节=%d;speed1高字节=%d\n", speed1, s_d_, s_g_8);


	// 将某个数值拆分为低8位、高8位、高16位。856218对应的二进制为:11010001000010011010
	uint32_t speed2 = 856218; // 定义或获取数值,需要用32位无符号来接收
	uint8_t s_d = speed2; //低八位:直接取8位值数据 :10011010
	uint8_t s_g = speed2 >> 8; // 高8位:是将整个数值向右移8位,然后再取8位值数据:  00010000
	uint8_t s_g16 = speed2 >> 16; // 高16位:是将整个数值向右移16位(取16位是因为前面已经取了低8位加高8位共16位,需要去掉这16位);然后再取8位值数据:  1101
	printf("speed2:%d;speed2低字节=%d;speed2高字节=%d,speed2高16字节=%d\n", speed2, s_d, s_g, s_g16);


	//改变某个值中其中几位、通过位运算拼凑数值
	uint32_t c_1 = 0; //先定义或接收数值
	c_1 = c_1 | 4;  //将c_1的第3位设为1(4的二进制为:100)
	c_1 = c_1 | 128; //将c_1的第8位设为1(128的二进制为:10000000)
	c_1 = c_1 | 32; //将c_1的第6位设为1(32的二进制为:100000)
	c_1 = c_1 | 512; //将c_1的第10位设为1(32的二进制为:1000000000)

	uint32_t  bit_10 = c_1 & 36;  // 36的二进制为:100100  ,过滤c_1值的第3、6位是不是1,如果是1,bit_10为36,不是则为0.这样是判断给定值的某一位是否为1
	printf("拼凑成的数据=%d;%x;第10位是:%d\n", c_1,c_1,bit_10);// 输出676 (1010100100)
}


void tempMethod() {
	
	printf("\n------------\n");
	unsigned a8, b, c;
	int n;
	scanf("%o,%d", &a8, &n);
	b = a8 << (16 - n);
	c = a8 >> n;
	c = c | b;
	printf("%o->%o->%d->%o\n", a8, c, n, b);
	
}


int main()
{
	int *p = 3;

	//p = 3;
	int a ,b ;
	a = 1;
	b = 1;
	//int c = a + b;
	//printf("aaaaa\r\n %d---%d",&a,&b);
	  //tos1(a, p);
	/*printf("aaaaa\r\n %d---%d",a,c);*/
	//puts("C 语言中文网");
	  //tos2(1,2);
	
	  //array();
	  //printf("\n");
	  //bundlesort();


	method1();
	return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值