我的问题在以下示例中val = val >> 2;
做了什么?那是我相信它是4分裂。
int val = 12345678;
val = val >> 2;
以下是此问题的背景信息。
我有一个水表的读数,比如12345678.我们的水表的工作方式是两个右手数字被扔掉读取,所以123456真的是读。 (有理由丢掉与水流如何使寄存器转动有关的两个右手数字。但这与我的问题无关。)
目前,我们采用12345678并将其除以100,使用4GL整数变量,所以我没有得到十进制数。我们正在截断我们没想到的,我是 试图确定位移是否会更好。
在将读取截断为123456之后,使用上次读取(也是截断的)计算增量,并从中生成消耗。
我在Informix 4GL中可以使用C,我相信删除最低两位数的最佳方法是向右移位2.我相信这是我将获得的唯一方法 - 对于例子 -
5 digit meter 12345 --> 123
6 " " 123456 --> 1234
7 " " 1234567 --> 12345
感谢您容忍一个简单的问题。我们试图找出一个问题,即端点 - 与仪表交谈 - 是如何编程的,以及数据实际上意味着什么来自端点。
答案 0 :(得分:10)
比特移位丢弃最后两个二进制数字,而不是十进制数字。它相当于整数除以4。你需要除以100来抛弃最后两位小数。
101111000110000101001110 bin = 12345678 dec
101111000110000101001110 bin >> 2 dec = 1011110001100001010011 bin
1011110001100001010011 bin = 3086419 dec
答案 1 :(得分:4)
'>>'执行按位移位操作。
要了解它的作用,您首先要将12345678转换为二进制。
12345678 = 100101101011010000111
'>>'意味着你将每个位向右移动,在你的例子中,移动2个位置。 (<<向左移动)
100101101011010000111 >> 2 = 001001011010110100001
然后转换回十进制:308641
答案 2 :(得分:1)
12345678 : 101111000110000101001110
12345678 >> 2 : 1011110001100001010011
12345678 / 4 : 1011110001100001010011
答案 3 :(得分:1)
在i4gl中,您可以轻松地将数字转换为CHAR,截断它[1,6],然后将其转换回INT。