#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;
}
C 语言中获取某一位、按位拼凑数据、低字节高字节数据获取示例
最新推荐文章于 2025-05-08 16:54:54 发布