【C语言】位操作

本文主要介绍了C语言中的位操作,特别是如何将64位数据转换为24位的过程,并探讨了按位运算的一些实用方法。欢迎读者分享更多关于位运算的高效技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按位进行相关操作

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

//typedef unsigned long long uint64_t;

uint64_t bData;
uint64_t a24;
uint64_t b24;

// 针对第几位进行与非运算,对应位置就是你想要的数据
void offset_64(uint64_t *data, long lsize_t, int byte_t)
{
        *data &= ~(lsize_t << ( 8 * byte_t));
        //printf("func: bData = %lld\n", *bData);
        printf("%"PRIu64"\n", *data);
        //printf("%lld\n", *data);
}

// 最低位异或运算结果放在第24位
void change1(uint64_t *data1, uint64_t *data2, uint64_t *data)
{
        int i;
        int j;
        int ret;
        i = *data1%2;
        j = *data2%2;
        *data = *data2;
        ret = i^j;
        *data = (*data - j) << 1;
        *data &= ~(0xFFFF << 25);
        *data |= ret << 24;
        
}

int main()
{

        // static data offset
        const unsigned long static_data[5] = {0x41, 0xAA, 0x42, 0xBB, 0x43};
        unsigned long temp;
        for(int i=1; i<=5; i++){
                temp = static_data[i-1];
                offset_64(&bData, temp, (8-i));
        }

        // switch
        long input_data[3] = {0xA9, 0x41, 0x1A};
        for(int j=0; j<3; j++){
                offset_64(&bData, input_data[j], (2 - i));
        }

        printf("%"PRIu64",%lu\n", bData, sizeof(bData));


        printf("-----------------------\n");
        offset_64(&a24, 0xC5, 2);
        offset_64(&a24, 0x41, 1);
        offset_64(&a24, 0xA9, 0);
        a24 &= ~(0xFFFF << 25);
        printf("%"PRIu64",%lu\n", a24, sizeof(a24));

        chang1(&bData, &a24, &b24);


        return 0;
}

主要记录一下,c库中对于64 32 24位的在库stdint.h中有定义,这里我也直接用64改24位。

针对按位运算如果还有好方法可以留言给我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值