HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1210
はる演算子が理解できない2解決


はる

リンク

2017/12/10(Sun) 00:42:44|NO.81997

vramを勉強しててとりあえず組み込んだだけなので学んだとは言えないですが
若干早くはなりましたがやっぱりpeekよりlpeek等4バイトずつの方が早いらしいのでやりたいと思いました
過去の投稿を見てましたが何をするかはわかりますが演算子が基本の使い方しか知らず混乱してしまいます

どういう意味か、もしくはここに書いてあるとかあれば教えてくださると嬉しいです
if sx1 & 3 : sx1 = (sx1 & 0x0ffffffc) + 4
正しければ          ↑の意味、htmlとか色とかしかわからないです
後はstickとかでしか使ってなくて条件式以外で&とか何を示してるかよくわかりません
物凄く基本的なことだと思いますがよろしくお願いします




#define RGB 3


; ↓あえて 4 の倍数にしない
buffer 1,319,240 : picload dir_exe + "/docs/cg.gif",1
mref VRAM1,66
sx1 = ginfo_winx * RGB
sy1 = ginfo_winy
dsize = sx1
/*
if sx1 & 3 : sx1 = (sx1 & 0x0ffffffc) + 4
*/
dsize = sx1 - dsize ; ←ダミーのサイズ
VramSize = sx1 * sy1; ←VRAM のサイズ

gsel

mref VRAM0,66
sx0 = ginfo_winx : tmp = sx0 * RGB
sy0 = ginfo_winy
if tmp & 3 : tmp = (tmp & 0x0ffffffc) + 4

x = 0 : y = 0
gosub *Draw
x = 320 : y = 240
gosub *Draw
redraw 1
stop

*Draw
r = (sy0 - y - sy1) * tmp + x * RGB
repeat VramSize / 4

a = cnt * 4
b = a\sx1 + (a/sx1*tmp)
/*
c = (a\sx1>dsize)*dsize ; ← ダミーを描画しないための値
*/
lpoke VRAM0, r + b, lpeek( VRAM1,cnt*4 - c )

loop
return



この記事に返信する


GENKI

リンク

2017/12/10(Sun) 01:45:46|NO.81998

> 0x0ffffffc
これは数値を16進数表記したものです。HSPでは頭に「0x」を付けると16進数表記を使用できます。
268435452を16進数にするとffffffcなので、HSPで16進数表記で使用する場合は、「0x0ffffffc」と書きます。
Windowsに付属の電卓を起動して「プログラマー」に切り替えると16進数表記できるので確認してみてください。(このツール意外と優秀で2進数表記もできます!)
HSPで「mes 0x0ffffffc」としてもいいですね。
しかしこのケースでは10進数表記しても意味はありません。

> 0x0ffffffc
8ケタなのでデータサイズは4バイト分です。

> htmlとか色とかしかわからないです
この理解はいい理解です。近い。
HTMLの場合を例に説明します。R=170=0xAA、G=187=0xBB、B=204=0xCCの場合は…
> #AABBCC
6ケタなので3バイト分のデータです。
「AABBCC」はAAとBBとCCではなく、16進数のAABBCC(10進数の11189196)つまり1個の数値です。1個の数値にしてしまえば、情報を渡す時に1回ですむので簡単です。
3つのデータを1このデータにまとめるために、3バイト分のデータスペース(16進数表記で6ケタ分)に次のようにデータを入れています。
5〜6桁目にRのデータ
3〜4桁目にGのデータ
1〜2桁目にBのデータ
1色は0x00〜0xFF(0〜255)の範囲のデータを持ちます。最大値でも2ケタなので上記のように上手く収まるわけです。


しかし、実際にPC内では「0xAABBCC」は2進数の形で存在しています。人間に分かりやすく取扱しやすい形としてバイナリデータは16進数表記がよく用いられています。これを意識しておかないと問題を上手く解決できなくなる事があります。


> if sx1 & 3 : sx1 = (sx1 & 0x0ffffffc) + 4
上記の話を踏まえて…これはビット演算をやっています。
詳しくはこちらをご一読ください。

HSP講座/ビット演算
https://wiki.hsp.moe/HSP%E8%AC%9B%E5%BA%A7%EF%BC%8F%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97.html

小ワザ/ビット操作
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



はる

リンク

2017/12/10(Sun) 04:04:20|NO.81999

お早い回答ありがとうございます!
知らないことも多数あり覚えるのが先になりそうなのでまだ先に進めなさそうですが
書いてあったように意識しておかないとうまく解決できなさそうなので時間をかけて理解していこうと思います
演算もなんとなくでやってましたが二進数の式みたいなのみて、なんとなくですがあぁ・・とは思いました
進数の話は至る所で見るのでどこかでちゃんと学ぶなり自分なりに表作らなきゃ整理できないかなぁとも思いました
全く!理解できない細かいところをいじりたくてvram学んでる所もあったのでその取っ掛かりも見つけられたのでよかったです
現状何にも進んでませんがせっかく教えてもらってるのでちゃんと学びますと言いたかったです
ありがとうございます!



ONION software Copyright 1997-2023(c) All rights reserved.