私の質問は、次の例では何をしval = val >> 2;
ますか? つまり、4で割ると思います。
int val = 12345678;
val = val >> 2;
これがこの質問の背景です。
12345678 などの水道メーターからの読み取り値があります。当社の水道メーターの動作では、読み取りのために右側の 2 桁が破棄されるため、実際には 123456 が読み取られます。(水流がどのようにレジスターを回転させるかに関係する 2 つの右側の数字を捨てるのには理由があります。ただし、それは私の質問とはまったく関係ありません。)
現在、4GL 整数変数を使用して 12345678 を 100 で除算しているため、10 進数が得られません。予期しない切り捨てが発生しており、ビット シフトの方が適切かどうかを判断しようとしています。
読み取りが 123456 に切り捨てられた後、最後の読み取り (これも切り捨てられます) を使用してデルタが計算され、そこから消費量が生成されます。
私は Informix 4GL で C を使用できます。最下位 2 桁を削除する最善の方法は、2 だけ右にビット シフトすることだと思います。それが、取得しようとしている唯一の方法だと思います-たとえば-
5 digit meter 12345 --> 123
6 " " 123456 --> 1234
7 " " 1234567 --> 12345
素朴な質問にお付き合いいただきありがとうございます。私たちは、メーターと通信するエンドポイントがどのようにプログラムされているか、そしてエンドポイントから出てくるデータが実際に何を意味するかという問題を理解しようとしています.