ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 08:54

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
 記事の件名: 演算結果のデータ型
投稿記事Posted: 2006年3月04日(土) 12:20 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
コード:
Dim a As Byte,b As DWord
a=&H10
b=a<<8
なぜかbの値が「0」となってしまいます。演算結果もByte型として認識されているのでしょうか?
コード:
Dim a As Word,b As DWord,c As DWord
a=&H1000
b=&H1111
c=a*b
このコードでもcは「&H1000」で、期待している「&H1111000」とは異なります。
ちなみに c=b*a とすると正しい結果になります。
また、ByteやWordなど、小さいデータ型を大きいデータ型にキャストして演算に使っても正しい結果が得られます。
(上の例では b=a As DWord<<8 や c=a As DWord*b)

Ver 4.13.00ぐらいまでは正常に動作していたんですが、仕様が変更になったのでしょうか…?
以上 Ver 4.21.00 Ver 4.22.00 で確認(Windows XP Home SP2)。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
投稿記事Posted: 2006年3月04日(土) 16:35 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
引用:
> Ver 4.13.00ぐらいまでは正常に動作していたんですが、仕様が変更になったのでしょうか…?
たぶん、仕様ではないかと思います。

かならず、式中の一番左のデータ型に丸められているみたいです。
C言語もそういう仕様だったと記憶しております。

ただ、/の場合は特殊な扱いみたいですが。。。
実際のところはどうなんでしょうね。


通報する
ページトップ
投稿記事Posted: 2006年3月04日(土) 18:04 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
そうですか。わかりました。
※Ver 4.13.00では問題ないのに、Ver 4.22.00ではコンパイルしたOrangeArchiverが正しく動作しなくなってしまいまして。具体的にどのように仕様が変わったかがわからなければ…。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月04日(土) 23:32 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
> C言語もそういう仕様だったと記憶しております。
Cの場合は少なくともint/unsigned int型(Win32では大抵32ビット)までは
無条件に格上げされた上で演算されることになっています。

だからというわけではありませんが、ABもLong/DWordまで格上げしてから演算する仕様にする、
つまり最初のhiraさんのコードも思ったとおりに動くようになっても悪くないと思います。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月05日(日) 00:41 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
ご報告ありがとうございます。
確実な仕様確定がなされてない中、コンパイラロジックの改良を行ってしまいました。申し訳ありません。

次回のバージョンアップで、C/C++同様、32ビットまでであれば暗黙的に拡張されるように修正しようと思います。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot] & ゲスト[7人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean