什么是12345 >> 2真的算术算术?

oct*_*bus 3 c informix bit-manipulation 4gl meter

我的问题是在下面的例子中val = val >> 2;做了什么?那是我相信它是4分裂.

int val = 12345678;
val = val >> 2;
Run Code Online (Sandbox Code Playgroud)

这是这个问题的背景.

我有一个水表的读数,比如12345678.我们的水表工作的方式是两个右手数字被扔掉读取,所以123456真的是读.(有理由丢掉两个与水流如何使寄存器转动有关的右手数字.但这与我的问题无关.)

目前,我们采用12345678并将它除以100,使用4GL整数变量,所以我没有得到十进制数.我们正在进行截断,我们没有想到,我正在尝试确定位移是否会更好.

在将读取截断为123456之后,使用最后一次读取(也是截断的)计算增量,并从中生成消耗.

我在Informix 4GL中可以使用C,我相信删除最低两位数的最佳方法是向右移位2.我相信这是我将获得的唯一方法 - 例如 -

5 digit meter   12345 --> 123
6  "     "     123456 --> 1234
7  "     "    1234567 --> 12345
Run Code Online (Sandbox Code Playgroud)

谢谢你容忍一个简单的问题.我们试图找出一个问题,即端点 - 与仪表交谈 - 是如何编程的,以及数据实际上意味着什么来自端点.

das*_*ght 10

位移丢弃最后两位二进制数字,而不是十进制数字.它等于整数除以4.你需要除以100来抛弃最后两位小数.

101111000110000101001110 bin = 12345678 dec

101111000110000101001110 bin >> 2 dec = 1011110001100001010011 bin

1011110001100001010011 bin = 3086419 dec