C语言二进制除法用左右移位来表示

有些编译器和硬件是支持乘除法和浮点运算,运用起来也是很方便!唯一让我不满的就是很占用ROM ! 所以某些平台恰好可以用移位来换算!

 

学习推算心得:

分母是为 2的平方的情况下成立! 2.4.8.16.32.64.128.256.512.1024.2048......

 

左移1位 相当于 乘以2 左移2位 相当于 乘以4 左移3位 相当于 乘以8 左移4位 相当于 乘以16 ...... 是以一累加, 乘以2的平方累加

右移1位 相当于 除以2 右移2位 相当于 除以4 右移3位 相当于 除以8 右移4位 相当于 除以16 ...... 是以一累减, 乘以2的平方累减

 

类题一:LM75A 温度传感器中的温度转换!

1、保留了两位小数点 value  =t*0.125;    0.125为 8分之一乘以100= 8分之100 t =value * 100; 相当于

 t = (t << 6)+(t << 5)+(t << 2);         64        32      4         刚好为 100  t = t>>3;    相当于除 8

 

2、保留了一位小数点

value  =t*1.25;     1.25 为  4分之5  相当于  t = (t << 2) + t;           4     t = t >> 2;        

类题二:DS18B20 温度传感器中的温度转换!

1、保留了两位小数点 value  =t*0.0625;   

t =value * 100;             t = 1/16 * 100 = 25/4;
相当于

 t = (t << 4)+(t << 3)+ t ;         16        8      1         刚好为 25

 t = t>>2;    相当于除 4

 

2、保留了一位小数点

value  =t*0.628;     0.628 为  8分之5  相当于  t = (t << 2) + t;           4     t = t >> 3;  相当于除 8

转载于:https://www.cnblogs.com/lycstronger/p/3977588.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一段示例代码,实现了将32位二进制数除以32位二进制数并将结果转换为8位二进制: ```c #include <stdio.h> int main() { unsigned int num1 = 0b11010101010101010101010101010101; // 32位二进制数1 unsigned int num2 = 0b10101010101010101010101010101010; // 32位二进制数2 unsigned char result; // 8位二进制结果 result = (unsigned char)(num1 / num2); // 整数除法 printf("%u\n", result); // 输出结果 return 0; } ``` 注意:在这个例子中,我们使用了unsigned int类型。因此,除法是整数除法,因此不会保留任何小数部分。 ### 回答2: 要实现C语言32位二进制与32位二进制相除并转换为8位结果,可以使用移位操作符和位操作符进行计算。下面是代码示例: ```c #include <stdio.h> int main() { unsigned int dividend = 0b10101010101010101010101010101010; // 被除数,32位二进制 unsigned int divisor = 0b11001100110011001100110011001100; // 除数,32位二进制 // 将32位二进制相除并转换为8位结果 unsigned char result = (unsigned char)(dividend / divisor); printf("结果:0x%x\n", result); // 打印结果,转为16进制显示 return 0; } ``` 在上述代码中,我们声明了两个32位二进制数,分别为被除数和除数。使用移位操作符和位操作符进行相除运算,并将结果强制转换为8位数据类型unsigned char。最后使用printf函数打印结果,结果会以16进制形式显示。 请注意,以上代码只是一个简单的示例,具体的操作和结果可能会根据实际需求和输入数据而有所变化。因此,在实际应用中需要根据具体情况进行修改和调整。 ### 回答3: 要将32位二进制数与32位二进制数相除并转换为8位二进制结果,可以通过以下步骤实现: 1. 首先,将两个32位二进制数分别转换为十进制数。 2. 然后,使用十进制数相除的方法计算结果。 3. 最后,将十进制的商转换为8位二进制数。 下面是一个示例代码,实现了以上步骤: ```c #include <stdio.h> void binaryDivision32to8(char dividend[], char divisor[], char quotient[]) { // 将32位二进制数转换为十进制数 int dividend_decimal = 0; int divisor_decimal = 0; for (int i = 0; i < 32; i++) { dividend_decimal = dividend_decimal * 2 + (dividend[i] - '0'); divisor_decimal = divisor_decimal * 2 + (divisor[i] - '0'); } // 用十进制数进行相除 int decimal_quotient = dividend_decimal / divisor_decimal; // 将十进制的商转换为8位二进制数 for (int i = 7; i >= 0; i--) { quotient[i] = decimal_quotient % 2 + '0'; decimal_quotient /= 2; } quotient[8] = '\0'; } int main() { char dividend[33] = "10011010110011011000101010011100"; char divisor[33] = "11101110001001011101100010110010"; char quotient[9] = ""; binaryDivision32to8(dividend, divisor, quotient); printf("32位二进制数相除并转换为8位二进制数结果为:%s\n", quotient); return 0; } ``` 在上述示例代码中,我们定义了一个函数`binaryDivision32to8`来执行二进制数相除并转换的操作。在`main`函数中,我们给出了两个32位的二进制数作为被除数和除数,然后调用`binaryDivision32to8`函数,并将结果打印在控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值