c - 如何在 C 上将二进制 PORTB 位从 "11010000"镜像到 "00001011"?

标签 c binary bit-manipulation microcontroller

<分区>

代码:

PORTB = "0b11010000";

问题:

我现在正在学习在 MPLab 上使用 C 语言对 8 位微 Controller PIC18F8722 进行编程。

如何将这个二进制 PORTB 位从“11010000”镜像到“00001011”?

最佳答案

关于 C 中位运算的最佳文章是 Bit Twiddling Hacks由肖恩·埃隆·安德森 (Sean Eron Anderson) 撰写。他提供了许多类型的 Bit 函数来以优化的方式做事。他的方法在世界范围内被接受,许多图书馆使用它们以优化的方式做事。他提供的Bits逆向方式:

  • 反转位序列:
    • 以明显的方式反转位
    • 通过查找表反转字中的位
    • 通过 3 个操作(64 位乘法和模除法)反转一个字节中的位
    • 通过 4 次操作(64 位乘法,无除法)反转字节中的位
    • 用 7 次操作反转一个字节中的位(没有 64 位,只有 32 位)
    • 通过 5 * lg(N) 次运算并行反转 N 位数量

显而易见的方式

unsigned int v;              // input bits to be reversed
unsigned int r = v;         // r will be reversed bits of v; first get LSB of v
int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end

for (v >>= 1; v; v >>= 1){   
    r <<= 1;
    r |= v & 1;
    s--;
 }
r <<= s; // shift when v's highest bits are zero

其他类型查看文章

关于c - 如何在 C 上将二进制 PORTB 位从 "11010000"镜像到 "00001011"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25385931/

相关文章:

sql - Postgres 中的通用位串与零的比较

java - 位计数方法

c - 如何将c代码映射到postgres c函数格式?

从字节检查偶校验

c - openssl ssl_read 将读取的二进制数据发送到 char*

c++ - 使用按位运算与相邻像元值确定像元值

ios - Udp套接字绑定(bind)失败

C程序检测直角三角形

tsql - 将十六进制字符串值插入 sql server 图像字段附加额外的 0

python - 将二进制 64 位时间戳偏移量从 GPS 纪元转换为 python 日期时间对象