コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2009年3月27日 >>> 2009年3月14日
link もっと後

2009年3月22日

ビットフィールド

今日はJavaでビットフィールドを扱う方法を探していたのですが、やり方がわかりません。

ビットフィールド(C言語)

#include <stdio.h>

union u {
        char c;
        struct _s {
                unsigned a:2;
                unsigned b:4;
                unsigned c:2;
        } s;
};

int main(int argc, char *argv[])
{
        union u v;

        v.s.a = 1;
        v.s.b = 0;
        v.s.c = 1;
        printf("v.c=%d(0x%x), v.s.b=%d(0x%x)\n",
                v.c, v.c, v.s.b, v.s.b);
        v.s.b = 10;
        printf("v.c=%d(0x%x), v.s.b=%d(0x%x)\n",
                v.c, v.c, v.s.b, v.s.b);

        return 0;
}

Cだと上記のように構造体風に書けるんですが、Javaだとどうすりゃいいんだろか。今は仕方ないのでシフトとビット演算でえっちらおっちら書いています。

シフトとビット演算

目的はある下位ビット(stビット目とする)からある上位ビット(edビット目とする)を占めるビットフィールドを抜き出すことです。これはビットフィールドの書き換え、つまり上記のCでいうところのv.s.b = 10; のような処理をしたいときに必要です。

もう一つの目的はビットフィールドに入っている値を得ることです。これはビットフィールドを読み取り、つまりprintf("%d", v.s.b); のような処理をしたいときに必要です。

まずstビット以上を1で埋めたパターン(パターンAとする)を作ります。
作り方: 1をstビット左シフトして1を引くと、stビットより下が1で埋まったパターンが得られますので、そのパターンをビット毎NOTをするとパターンAが得られます。

次にedビット以下を1で埋めたパターン(パターンBとする)を作ります。
作り方: 1をedビット左シフトして1を引くと、edビットより下が1で埋まったパターンが得られます。そのパターンに1をedビット左シフトした値をビット毎ORすると、パターンBが得られます(※)。

パターンAとパターンBのビット毎ANDを取ると、stビットからedビットまでが1で埋まったマスクが得られます。

ビットフィールドを保持している値とマスクをビット毎ANDすると、目的のビットフィールド以外を0で潰した値が得られます。

ビットフィールド内の値を得たい場合は、パターンBだけビット毎ANDして、その後stビット論理右シフトします。パターンAをANDしなくても結果は同じです。


ビットフィールド

例としてst = 2, ed = 5の状態を図示すると上記のようになります。

おそらく「何やってるんですかJavaなら○○で一発ですよ!」ってオチがある気がしてならないので、もっと良いやり方があったらぜひ教えてくださいまし。

(※)1をed + 1ビット左シフトして1を引く方法は正常に計算できない場合があります。edと変数のビット長が等しい場合、(変数のビット長 + 1) ビットの左シフトが起きます。CやJavaでは変数のビット長を超える左シフトの結果は不定のため、得られるパターンも不定となります。

編集者:すずき(2009/03/26 01:08)

コメント一覧

  • すずきさん(2011/03/03 09:27)
    間違っていたので訂正。
    Javaでビット長を超える左シフトの結果は不定ではなく、シフト量の下位数ビットのみ有効になる、が正解です。

    intに対する左シフトの場合は下位5ビット、つまり0〜31まで、
    longに対する左シフトの場合は下位6ビット、つまり0〜63までシフトできます。
    例を挙げると、intに対する32ビットシフト=0ビットシフトです。

    参考: Java Language Specification, Third Edition, chapter 15(expressions), 15.19 Shift Operations
open/close この記事にコメントする



2009年3月16日

コンシューマ機の宿命

昨日の日記のお母さんのコメント「DSはもう少し画面が大きいと良いのに。」を見てふと思ったこと。

先日発売された新型機DSiでは画面が少し大きくなりました。ということは任天堂は画面が小さいという問題を認識していて、改善する意志もあるんです。なのにもっと画面を大きく(例えば倍くらい)できないのはなぜ?

あまりでかいと持てない、など理由は色々あると思いますが、大きな理由は初代DSやDS Liteと同じ環境を保つため、でしょう。

環境を保つと何が嬉しいかというと、初代DSで遊べるゲームが新型機のDS LiteやDSiでも遊べるようになります。逆に環境を保たないと、新型機で性能や機能(画面サイズなど)を変えると、過去のゲームが破綻して遊べなくなってしまいます。

より良く変えることが出来るのに、変えられない…新型機で過去のゲームが遊べることは当たり前に見えて、結構大変なのです。

5年持つスペック

ゲーム機は一度流行れば5年は持ちますから、基本となる初代機のスペック決めは非常に重要です。とはいっても、5年間使われるスペック決めってどうやるんですかね?相当難しいよね?

編集者:すずき(2009/03/23 00:49)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2009年3月15日

誕生日

大下さんと2人でハンドミキサーを買いに行きました。ヨドバシのポイントだけで買えてしまいました。思いのほか安かった。

いつぞやメレンゲを泡立てるのは大変という話をしていたので選んだつもりでしたが、大下さんは「お菓子を作って俺に喰わせろ。」という意味だと思っていたようです。とりあえずお菓子を作ってくれることには変わりないです。

誕生日特典を利用して、京831(やさい)倶楽部(大阪市西梅田、ブリーゼタワー5F)のコースを格安で。名前の通り野菜がメインでうまいです。タケノコが甘いなんて初めて知った。

テーブル上にろうそくがあり、料理が出てくる合間にいたずらしていたら、ろうそくの芯が折れて火が消えてしまいました。ご迷惑かけました…。

オーキードーキー

ニンテンドーDSiを買いました。個人的にはWPA-PSK(AES/TKIP) に対応しているのがグッド。

カメラは何に使うか良くわかりません。面白いかどうかは別として、カメラとWi-Fiとマイクがあるので、ゲーム+テレビ電話(上画面に人、下画面に対戦画面)ができそうですね。いよいよ携帯電話と携帯ゲーム機の垣根が低くなってきたなあ。

ゲームもついでに買いました。マリオ&ルイージRPG 3です。Aでマリオを動かして、Bでルイージを動かします。操作は簡単なのにタイミングがよくわからず、しょっちゅう押し間違えて敵にボコボコにされます。

編集者:すずき(2009/03/16 22:29)

コメント一覧

  • mamaさん(2009/03/18 10:18)
    DSおもしろいねぇ〜
    すっかりはまってます。私は推理物ですが、画面がもちょっと大きいといいのにな。
  • すずきさん(2009/03/22 17:52)
    確かにもう少し画面が大きい方がいいです。細かい字が見えません。
open/close この記事にコメントする



link もっと前
2009年3月27日 >>> 2009年3月14日
link もっと後

管理用メニュー

link 記事を新規作成

<2009>
<<<03>>>
1234567
891011121314
15161718192021
22232425262728
293031----

最近のコメント5件

  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」
  • link 24年10月1日
    hdkさん (10/03 08:30)
    「おー、面白いですね。xrdpはすでに立ち...」
  • link 14年6月13日
    2048player...さん (09/26 01:04)
    「最後に、この式を出すのに紙4枚(A4)も...」
  • link 14年6月13日
    2048playerさん (09/26 01:00)
    「今のところ最も簡略化した式です。\n--...」

最近の記事20件

  • link 24年10月1日
    すずき (10/03 10:16)
    「[Ubuntuのxrdpに接続できない病] 目次: LinuxWindowsからUbuntu 22.04 LTSのxrdpに接...」
  • link 24年9月28日
    すずき (10/03 01:07)
    「[TAS動画をニコニコ動画にアップロードできない] クラッキングでぶっ壊されてしまったニコニコ動画が復活し、シン・ニコニコ動画...」
  • link 23年4月10日
    すずき (10/03 00:38)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
  • link 24年9月14日
    すずき (09/22 11:23)
    「[OpenSBIを調べる - scratch領域の詳細] 目次: Linux今回はOpenSBIのコード内に頻出するscrat...」
  • link 21年8月11日
    すずき (09/22 00:15)
    「[Kindle - まとめリンク] 目次: Kindle初代Kindle Fire HDの話。Kindle Fire HDのカ...」
  • link 24年8月11日
    すずき (09/22 00:14)
    「[Amazonマイリストへの問い合わせの返事がきた] 目次: Kindle先日(2024年8月4日の日記参照)Amazonへ問...」
  • link 24年5月19日
    すずき (09/21 23:23)
    「[Yocto - まとめリンク] 目次: YoctoHello YoctoYoctoのセットアップスクリプトとビルドディレクト...」
  • link 24年9月17日
    すずき (09/21 23:22)
    「[Yoctoの並列Fetchでエラーが起きるとき] 目次: YoctoYoctoは特に何も指定せずにビルドすると全スレッドを使...」
  • link 23年4月24日
    すずき (09/19 22:25)
    「[Arty A7のFPGAを書き換える方法] 目次: RISC-VいつもArty A7-100を書き換えるときSPI Flas...」
  • link 24年9月13日
    すずき (09/17 19:26)
    「[OpenSBIを調べる - OpenSBIとRISC-V ISA extensions] 目次: Linux今回はOpenS...」
  • link 24年8月31日
    すずき (09/01 15:01)
    「[Microsoftマウスが壊れた] 3年前くらいに購入した(2021年3月6日の日記参照)Microsoft Basic O...」
  • link 23年5月15日
    すずき (09/01 15:00)
    「[車 - まとめリンク] 目次: 車三菱FTOの話。群馬県へのドライブ将来車を買い替えるとしたら?FTOのオイル交換とオイル漏...」
  • link 24年8月25日
    すずき (09/01 14:59)
    「[レガシィの7回目の車検完了] 目次: 車ディーラーまで車検の車を取りに行きました。外は非常に暑くて辛いです…&...」
  • link 21年3月6日
    すずき (09/01 14:14)
    「[気に入るマウスはどれ?] 手に合うワイヤレスマウスを探し続け、高級製品、小さい製品、お手ごろ製品と買いまくり、一時は家に5個...」
  • link 24年8月27日
    すずき (08/28 23:42)
    「[Milk-V Jupiterが届いた] 目次: RISC-VMilk-V Jupiterが届きました。お値段が非常に安かった...」
  • link 21年6月18日
    すずき (08/28 23:29)
    「[RISC-V - まとめリンク] 目次: RISC-V関係の深いまとめリンク。目次: LinuxSiFive社ボードの話、C...」
  • link 22年12月22日
    すずき (08/28 22:05)
    「[x86とARMとRISC-VでCoreMark対決] 目次: RISC-VCoreMarkを以前(2019年7月5日の日記参...」
  • link 22年5月26日
    すずき (08/27 12:39)
    「[glibcのスレッドとスタック] 目次: C言語とlibc誰も興味ないglibcの話シリーズ、スレッドのスタックはどうやって...」
  • link 22年8月29日
    すずき (08/21 16:22)
    「[マンガ紹介] 目次: マンガ紹介久しぶりにお気に入りのマンガ紹介シリーズ。短めの完結作品を2つ。赤髪の女商人(全3巻、202...」
  • link 22年7月8日
    すずき (08/21 14:21)
    「[マンガ紹介 - まとめリンク] 目次: マンガ紹介一覧が欲しくなったので作りました。5作品乙女ゲームの破滅フラグしかない悪役...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 10/03 19:05