HSPというかプログラムでは、整数は2進数で記録されています。(整数以外についてここで説明すると分かりにくくなるだけなので、説明をわかりやすくするため整数だけに絞って説明します。)
人間が直接2進数を書くのは難しすぎるので、普通は10進数や16進数で書いて使います。書き方が違っても同じ整数型の変数に同じデータが入れば同じ値の数値として利用できます。
dec = 39 ; 10進数表記
hex = 0x27 ; 16進数表記
bit = 0b100111 ; 2進数表記
mes dec
mes hex
mes bit
39 = 0b100111 という関係です。
プログラムでは、整数は2進数で記録され取り扱われるので、論理和(OR)に使用することができます。
論理和(OR)について詳しくはHSP開発wikiのこちらをどうぞ。
https://wiki.hsp.moe/%E5%B0%8F%E3%83%AF%E3%82%B6%EF%BC%8F%E3%83%93%E3%83%83%E3%83%88%E6%93%8D%E4%BD%9C.html#u148a96d
というわけで、「1|2|4|32」で何が起きているかをわかりやすくしてみたのがこちら。
mes "" + 0b000001
mes "" + 0b000010
mes "" + 0b000100
mes "" + 0b100000
mes "" + (0b000001 | 0b000010 | 0b000100 | 0b100000)
mes "" + 0b100111
2進数表記だと各桁(ビット)が0と1だけしかないのがよくわかります。
プログラムではこの仕組みを使って、何かが有効になっているか無効になっているかの目印として使用されます。
例えばある桁が1だとビットが立っているので有効、0だとビットが立っていないので無効とかです。
ある桁が1の状態をフラグが立っているとも表現されます。
整数の変数1個は、2進数だと32桁ああります。つまり最大32個のフラグを1個の変数だけでまとめて管理できるので超便利なのです。
「var_100=39」と書いてしまうと、「39」という意味が分かりにくい表現になります。
「var_100=1|2|4|32」と書けば4つのフラグを有効にしているという意味が明確になります。(1,2,4,8,16,32はビットが1つだけ立つと分かっているので。)
しかしそれでも各フラグの意味が分かりにくいので、元々はTOMATOさんの指摘通り「hensu = FLAG_A | FLAG_B | FLAG_C | FLAG_F」のような書き方だったのだと思います。
> 色んな場所で同じ変数に代入し直していて
何かの処理をする前に変数の初期化をしているのだと思います。
作業前に条件をリセットして、前提を整えてから処理を開始したかったのではないかと。
> こういうときの調べ方も分かれば教えていただきたいです。
前任者の仕様書無しプログラムの再利用ですか。2通りあります。
分からない部分はわからないまま、結果としてそういう風に動くものとして使う。元のプログラムにはできるだけ手を加えず、入力内容または出力結果だけに必要な手を加える。短期的には何とかなりますが、将来的には完全に手に負えなくなります。バグも出やすいので慎重に。
作った人と同等以上の技術を持って内容の理解に取り組む。具体的には、同じような動作をするプログラムを自分でも作ってみて比較する。将来的にも安全安心な方法です。
私としては、同じようなものを一度自分で作って見ることをお勧めします。
案外元のものよりいいものができるかもしれませんし。