変数:ABC(負号無し1byte)は「-10」のオフセットがついてます。
(0の時-10という値を表す)
変数:XYZ(負号無し1byte)には「-50」のオフセットがついてます。
(0の時-50という値を表す)
この2つの変数を使って、XYZ = ABCの代入処理をする場合ですが、
ABC=100とした時(物理値は90)XYZにこのまま代入すると
物理値は50になってしまうので、XYZのオフセット分に合わせこむ為、
ABCの変数に「40」を加算し「140」にしてから代入すれば良いのでしょうか?
又、ABC = XYZ をやる場合は逆に-40してから代入すればOKでしょうか?
ご存知の方おりましたら、教えてくださいお願いします。
No.4ベストアンサー
- 回答日時:
オフセット値がくせ者ですね。
ただし、ここでは符号無し1バイトということですから、データタイプは unsigned char ということになり、オフセット値はマイナス(-)の符号を用いることはできません。すなわち、+オフセット値をとります。ここでは、オフセット値を先にセットしてから代入を行っていますが
abc = 値;
ではなく
abc += 値; ・・・(1)
の加算による代入としています。
そして abc を用いた xyz への代入は
xyz = abc;
ではなく、オフセット値を配慮した (1) と同じ
xyz += abc - OFFSET_A; ・・・(2)
の加算による代入としています。
OFFSET_A は、(2) で配慮していますが、(1) の段階で配慮しても構いません。いずれも、物理値を xyz に渡すようにすることです。OFFSET_Aを (1) にもってくるか (2) にもってくるかは、あなたが理解し易い方を選べば良いのではないでしょうか。
#include <stdio.h>
#define OFFSET_A10
#define OFFSET_X50
#define reset(a,b) {a = OFFSET_A; b = OFFSET_X;}
int main(void) {
unsigned char abc, xyz, temp;
/* 各オフセットの設定 */
reset(abc, xyz);
/* 表示読みの代入 */
printf("表示abc(%d)? ", OFFSET_A);
scanf("%d", &temp);
abc += temp;
xyz += abc - OFFSET_A;
printf("xyz: 表示.%d - オフセット.%d = 物理量.%d\n",
xyz + OFFSET_X, OFFSET_X, xyz);
reset(abc, xyz);
printf("表示xyz(%d)? ", OFFSET_X);
scanf("%d", &temp);
xyz += temp;
abc += xyz - OFFSET_X;
printf("abc: 表示.%d - オフセット.%d = 物理量.%d\n",
abc + OFFSET_A, OFFSET_A, abc);
return 0;
}
No.3
- 回答日時:
>変数:ABC(負号無し1byte)は「-10」のオフセットがついてます。
ABC: 0 から 255 ← 「負号無し1byte」
「物理値」: 10 から 265
と読めますが、
>(0の時-10という値を表す)
ABC: 0 から 255 ← 「負号無し1byte」
「物理値」: -10 から 245
オフセットしない値が -10 では、「+10」のオフセット、ではないですか。
★引用した2行は、矛盾していませんか。
>ABC=100とした時(物理値は90)
前述後者の「 + 」のオフセット、ですね。← ABC = 90 + ( +10 ) = 100
以降、おそらく質問者様の意に反して?「 + 」のオフセット、でアドバイス。
----------------------------------------------------------
(「物理値」は、小文字表記しています)
>XYZ = ABCの代入処理をする場合・・
xyz + ( +50 ) = abc + ( +10 ) ですよね。
★abc = 90 のとき、xyz は 50 となり、XYZ, ABC は 100 のまま( XYZ = ABC )。
プログラム的にしてみると、
#define BIAS (10)
#define ABC_OFF(i) (i+BIAS) // ((i+BIAS+256)%256)
abc = 90; // 「種」となる値 = オフセットしない値
ABC = ABC_OFF( abc );
XYZ = ABC;
これで、ABC は 100 となり、XYZ も当然・・。
>ABC = XYZ をやる場合は逆に-40してから代入すればOKでしょうか?
・「 - 」のオフセットの場合は、「-40してから代入すればOK」です。
abc + ( +10 ) = xyz + ( +50 ) から、abc = xyz + 40
・「 + 」のオフセットの場合は、「+40してから代入すればOK」です。
プログラム的にしてみると、
#define BIAS (50)
#define XYZ_OFF(i) (i+BIAS)
xyz = 200; 例えばの値
XYZ = XYZ_OFF( xyz );
ABC = XYZ;
これで、ABC は、250 になる・・。
★ abc は、250 - ( +10 ) で 240 → 200 に「+40してから代入」と同じ。
注意:「+-40して」云々で、「求める」ものは「物理値」であり、ABC ではない。
No.2
- 回答日時:
必ずしも、オフセット値の差が同じ処理ばかりという保証はありませんから、一旦物理値にする方がスマートです。
そうすると、
・Aを「物理値に変換するマクロA(関数A)」で物理値に変換
・物理値を「物理値からオフセット値に変換するマクロX(関数X)」で変換し代入
とすることで、このマクロ(関数)を変更するだけで本体の処理はそのままで使用することができ、変更漏れによるミスもなくすことができます。
特に、
>ABC(負号無し1byte)
に対して
>-40してから
と行った場合、40未満の値に対して型の変換問題が発生しやすくなります。
……と、ここまで書いて気がついたのですが、両方とも「符号なし」ですね。
単純に「-50」としたら物理値が「0~49」の時に問題が発生しませんか?
「符号あり」の間違いでは?
No.1
- 回答日時:
>この2つの変数を使って、XYZ = ABCの代入処理をする場合ですが、
>ABC=100とした時(物理値は90)
物理値の代入をしたいのですか?だとすると、
1)ABCの値を物理値に変換する(100→90)
2)ABCの物理値90をXYZに代入する
3)XYZにオフセットを履かせる(90→140)
これで、ABCのオフセット付き値(100)を
XYZのオフセット付き値(140)に代入できたことに
なりませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/10 08:51
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/03/09 14:24
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 08:37
- システム科学 割合の計算式教えてください 8 2023/02/03 17:38
- 数学 …こりゃ酷すぎる。回答者諸君、しっかりしなさい。初等的な問題にはまず初等的な解法を示すべきと心得よ。 7 2022/04/11 22:00
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) 列の複数ある空白セルを飛ばして、セルに並べて表示したい 3 2023/02/12 16:49
- 政治 ABC予想で自衛隊を合憲にする事ができますよね? 3 2022/04/23 05:46
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
processing エラーで、 "cannot...
-
C言語 アロー演算子について質...
-
jsp~jspにhiddenを使って変数...
-
EXCEL/VBA 変数の値をクリップ...
-
i++と++i ってどう違うのですか?
-
インクリメント演算子の前置(+...
-
【VBA】複合代入演算子
-
変数にオフセットが付いている...
-
プログラミングで変数と関数の...
-
C言語 列挙型(enum型)変数について
-
JavaScriptをURLから直接実行し...
-
int→unsigned int キャスト
-
[VBS]変数を定数に変換する方法...
-
整数xxxが大き過ぎますというエ...
-
C言語 初心者です。
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
COLUMN(1:1)の意味を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
テキストボックスの値を変数に...
-
processing エラーで、 "cannot...
-
Variant型で宣言してるのにEmpt...
-
EXCEL/VBA 変数の値をクリップ...
-
[VBS]変数を定数に変換する方法...
-
C言語 アロー演算子について質...
-
jsp~jspにhiddenを使って変数...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
変数にオフセットが付いている...
-
ExcelのVBAでをA列に第0〜19項...
-
「%」を使って、偶数か奇数かを...
-
【VBA】複合代入演算子
-
無名関数のメリットがよくわか...
-
gridViewの行選択解除
-
VBA 1行で複数の代入を行った...
-
コマンドプロンプト バッチ|結...
-
stdpicture型の変数に、、
おすすめ情報