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

  • 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、付费专栏及课程。

余额充值