[求助] 整数相除问题

1nnocent   2022-6-6 18:54 楼主

两个整数a=3,b=2;

两数相除得整数 c=a/b(c得值为整数1,实际应为1.5),

如果将相除得到的整数c,向左移一位的话,c的值为10还是15?

回复评论 (16)

『如果将相除得到的整数c,向左移一位的话,c的值为10还是15?』

计算机使用二进制。左移一位是移二进制的一位。

点赞  2022-6-6 18:58

【如果将相除得到的整数c】乘以10的话是10。左移一位是2。

点赞  2022-6-6 19:19
看你是定义a b是什么类型如果是uint8_t c=a/b 即c = 1 左移一位 c = 2
点赞  2022-6-6 20:24
引用: wangerxian 发表于 2022-6-6 19:19 【如果将相除得到的整数c】乘以10的话是10。左移一位是2。

如果是两个二进制数相除后得到商的小数点后一位的话,把得到的商右移再对10求余可以吗?右移几位呢?

点赞  2022-6-7 09:44

不知道你要干什么,二进制除法 3/2, 假定4bit, 0011/0010, 商为0001,余数0001

点赞  2022-6-7 11:17

有个做法,你想取的一位小数,可以在做除法前先把除数*10,相当于存的变量是实际值的10倍,做显示或者其他运算的时候再针对处理就好了

a*10/b=15

点赞  2022-6-7 11:30

另外求余数可以直接用运算符%:3%2=1

点赞  2022-6-7 11:32
引用: 1nnocent 发表于 2022-6-7 09:44 如果是两个二进制数相除后得到商的小数点后一位的话,把得到的商右移再对10求余可以吗?右移几位呢?

浮点类型不能左右移哦!

点赞  2022-6-7 13:03
引用: 1nnocent 发表于 2022-6-7 09:44 如果是两个二进制数相除后得到商的小数点后一位的话,把得到的商右移再对10求余可以吗?右移几位呢?

而且求余也只能是整数才能求余。

点赞  2022-6-7 13:03

实测一下看看

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-6-7 19:40

是2

c =a/b;  //==> c=1

c <<=1;// ==>c=2

 

如果你想要得到1.5的实际数据(整数没法表示,除非用双精度,浮点);

就是直接用浮点 a,b,c都用浮点,结论就是1.5

如果你想得到一个类似15的数。那就可以:

a =a*10;

c =a/b;

这个时候c就是15

 

如果你想精度更高点

可以a*100  a*1000不过要考虑不要溢出。

 

 

点赞  2022-6-8 09:05

看其他人解释应该是×2

点赞  2022-6-8 09:21
引用: jimtien 发表于 2022-6-7 11:17 不知道你要干什么,二进制除法 3/2, 假定4bit, 0011/0010, 商为0001,余数0001

写Verilog的时候碰到的,Verilog不能表示小数,所以问一下c=3/2后,c是不是直接变成整数1了,是的话就取不到小数部分了,要另外想算法 

点赞  2022-6-11 14:21
引用: damiaa 发表于 2022-6-8 09:05 是2 c =a/b;  //==> c=1 c <<=1;// ==>c=2   如果你想要得到1.5的实际数据 ...

用的是Verilog语言,没有浮点数的语法

点赞  2022-6-11 14:22
引用: freebsder 发表于 2022-6-7 19:40 实测一下看看

问题已经解决了

 

点赞  2022-6-11 14:22
引用: maychang 发表于 2022-6-6 18:58 『如果将相除得到的整数c,向左移一位的话,c的值为10还是15?』 计算机使用二进制。左移一位是移二进制 ...

『如果将相除得到的整数c,向左移一位的话,c的值为10还是15?』

我这里描述有点问题,不是左移,是商c=3/2, 得到的c*10,能不能得到15,因为使用的语言是Verilog,没有浮点数语法。不过问题现在已经解决了。

点赞  2022-6-11 14:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复