亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

二進制文字?

二進制文字?

C++
料青山看我應如是 2019-12-27 15:22:59
在代碼中,有時我會看到人們以十六進制格式指定常量,如下所示:const int has_nukes        = 0x0001;const int has_bio_weapons  = 0x0002;const int has_chem_weapons = 0x0004;// ...int arsenal = has_nukes | has_bio_weapons | has_chem_weapons; // all of themif(arsenal &= has_bio_weapons){  std::cout << "BIO!!"}但是在這里使用十六進制格式對我來說沒有意義。有沒有一種方法可以直接用二進制文件呢?像這樣:const int has_nukes        = 0b00000000000000000000000000000001;const int has_bio_weapons  = 0b00000000000000000000000000000010;const int has_chem_weapons = 0b00000000000000000000000000000100;// ...我知道C / C ++編譯器不會對此進行編譯,但是必須有解決方法嗎?是否可以使用其他語言(例如Java)?
查看完整描述

3 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

我會使用一個移位運算符:


const int has_nukes        = 1<<0;

const int has_bio_weapons  = 1<<1;

const int has_chem_weapons = 1<<2;

// ...

int dangerous_mask = has_nukes | has_bio_weapons | has_chem_weapons;

bool is_dangerous = (country->flags & dangerous_mask) == dangerous_mask;

它甚至比泛濫的0更好。


查看完整回答
反對 回復 2019-12-27
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

在C ++ 14中,您將能夠使用具有以下語法的二進制文字:


0b010101010 /* more zeros and ones */

此功能已在最新版本clang和中實現gcc。如果使用options運行那些編譯器,則可以嘗試一下-std=c++1y。



查看完整回答
反對 回復 2019-12-27
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

順便說一下,下一個C ++版本將支持用戶定義的文字。它們已經包含在工作草案中。這允許出現這種情況(希望我沒有太多錯誤):


template<char... digits>

constexpr int operator "" _b() {

    return conv2bin<digits...>::value;

}


int main() {

    int const v = 110110110_b;

}

conv2bin 將是這樣的模板:


template<char... digits>

struct conv2bin;


template<char high, char... digits>

struct conv2bin<high, digits...> {

    static_assert(high == '0' || high == '1', "no bin num!");

    static int const value = (high - '0') * (1 << sizeof...(digits)) + 

                             conv2bin<digits...>::value;

};


template<char high>

struct conv2bin<high> {

    static_assert(high == '0' || high == '1', "no bin num!");

    static int const value = (high - '0');

};

好吧,由于上面的“ constexpr”,我們得到的是在編譯時已經完全評估過的二進制文字。上面使用了硬編碼的int返回類型。我認為甚至可以使它取決于二進制字符串的長度。它對任何有興趣的人使用以下功能:


廣義常數表達式。

可變參數模板??梢栽谶@里找到簡要介紹

靜態斷言(static_assert)

用戶定義的文字

實際上,當前的GCC干線已經實現了可變參數模板和靜態斷言。我們希望它將很快支持其他兩個。我認為C ++ 1x會搖搖欲墜。


查看完整回答
反對 回復 2019-12-27
  • 3 回答
  • 0 關注
  • 608 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號