ポインターについて

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
YS

ポインターについて

#1 投稿記事 by YS »

Dim temp As Byte
temp=&H60
とした場合、変数tempの中身は
01000000
となっているはず。
ここで、tempの先頭から2byteのメモリの内容を知りたいのですが
どうしたらよいのでしょう?

私は、変数のポインタは変数の先頭アドレスを示しているはずだから
tempのポインタを-6シフトさせてGetByteでポインタからデータ
を取り出すと
00000001
になっているはずだとおもって、
Print GetByte(VarPtr(temp)-6) And &H1
こんな事してみたのですが、表示は0

素直に
Print (temp And &H40)/&H40
としたほうがよいのでしょうか?
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

Re: ポインターについて

#2 投稿記事 by NoWest »

> Dim temp As Byte
> temp=&H60
> とした場合、変数tempの中身は
> 01000000
> となっているはず。
> ここで、tempの先頭から2byteのメモリの内容を知りたいのですが
> どうしたらよいのでしょう?
多分、仰りたいのは先頭から2bit目だと思いますが、
どうでしょうか?

あと&H60は二進数では01100000だと思います。

> 私は、変数のポインタは変数の先頭アドレスを示しているはずだから
> tempのポインタを-6シフトさせてGetByteでポインタからデータ
> を取り出すと
> 00000001
> になっているはずだとおもって、
> Print GetByte(VarPtr(temp)-6) And &H1
> こんな事してみたのですが、表示は0
確かにポインタは変数の先頭アドレスを示していますが、
変数内の何bit目に0か1が立っているかを調べることには使いません。

何ビット目が0に成っているか1に成っているかを調べるには
ビットマスクビットシフトを使います。

例えば、問題のように2bit目が0なのか1なのかを調べるには

コード: 全て選択

Dim temp As Byte
temp=&H60
Print (temp<<2)>>8
のようにしたり

コード: 全て選択

Dim temp As Byte
temp=&H60
Print (temp and &H40)>>6
というようにします。
返信する