Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

曜日をbit管理する

More than 1 year has passed since last update.

色々やりたいタイミングなのでopenFrameworksでbit値を使って曜日管理したいと思い、
C++全然触ったことないけど一生懸命調べた。

要件としては与えられた曜日設定に対して、本日が対象の曜日かを調べること。

日月火水木金土を0000000の7bitとして
1000001なら土日、0111110なら月〜金みたいな感じで
今日の曜日に対してフラグが立ってるかの関数を実装。

bool ofApp::CheckWeekday(unsigned short settingDay){
    bool result = false;

    bitset<7> bitsetWeeks{settingDay};

    int current = pow( 2, 6 - ofGetWeekday());
    bitset<7> bitsetCurrent{static_cast<unsigned short>(current)};

    if ((int)(bitsetWeeks & bitsetCurrent).to_ulong() > 0){
        result = true;
    }
    return result;
}

ofGetWeekdayが0=Sunday〜の対応だったので
要件を満たす形に変換したのが↓コレ

pow( 2, 6 - ofGetWeekday());
//日:64,月:32,火:16,水:8,木:4,金:2,土:1

この記事書いてる今日は火曜日なので
0010000
と変換出来る。

ここまでくればbitsetの論理積を取ってあげて
整数値に戻した値が0より大きければ対象曜日となる。。。
んだけどキャスト塗れでかっこ悪い…cppって難しいなぁ

SHIN_DEVELOP
サーバーサイドのぷろぐらまー
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away