¥¹¥Ý¥ó¥µ¡¼¥µ¥¤¥È¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É

Home ¡ä 2008-07 /  ¡ä This Entry 2005-08 / ¼ÂÁõµ»½Ñ ¡ä This Entry [com : 0][Tb : 2]

2005-08-02

¡¡À©¸æ¥ì¥¸¥¹¥¿¤ÎÁàºî¤Ê¤É¡¢¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤¬»È¤¨¤ì¤Ð¥³¡¼¥É¤¬¤¹¤Ã¤­¤ë¤¹¤ë¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ï½èÍý·Ï¤Ë¶¯¤¯°Í¸¤¹¤ë¤Î¤Ç¡¢°Ü¿¢À­¤ò¹Í¤¨¤ë¤È¤¢¤Þ¤ê»ÈÍѤ¹¤Ù¤­¤Ç¤Ï¤Ê¤¤µ¡Ç½¤Ç¤â¤¢¤ê¤Þ¤¹¡£

¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤¬¼ÂºÝ¤Ë¤É¤ó¤Ê¥Ó¥Ã¥È¥¢¥µ¥¤¥ó¤ËÂбþ¤¹¤ë¤«¤Ï¡¢´°Á´¤Ë½èÍý·Ï¤Ë°Í¸¤·¤Þ¤¹¡£¥Ð¥¤¥È¥ª¡¼¥À¡¼¤¬¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤«¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤«¤Ç¥Ó¥Ã¥È¥ª¡¼¥À¡¼¤â·è¤Þ¤ë¤È¹Í¤¨¤ë¤Î¤Ï¡¢¤è¤¯¤¢¤ë´ª°ã¤¤¤Ç¤¹¤¬¡¢¼ÂºÝ¤Ë¤Ï¥Ó¥Ã¥È¥ª¡¼¥À¡¼¤È¥Ð¥¤¥È¥ª¡¼¥À¡¼¤È¤ÏľÀÜ´Ø·¸¤¢¤ê¤Þ¤»¤ó¡£

¤µ¤é¤Ë¡¢C¤Ç¤Ï¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ë»È¤¨¤ë·¿¤Ïint, signed int, unsigned int¤Î£³¼ïÎà¤À¤±*1¤Ç¤¢¤ê¡¢int¤ò»ØÄꤷ¤¿¾ì¹ç¤ËÉ乿ÉÕ¤­¤Ë¤Ê¤ë¤«Éä¹ç¤Ê¤·¤Ë¤Ê¤ë¤«¤â½èÍý·ÏÄêµÁ¤È¤¤¤¦Ìñ²ð¤ÊÌäÂê¤Þ¤Ç¤¢¤ê¤Þ¤¹¡£

¿¤¯¤Î½èÍý·Ï¤Ç¤Ï¡¢int°Ê³°¤Î·¿¡¢¤¹¤Ê¤ï¤Áchar¤äshort¤älong¤Ê¤É¤â»È¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢ÆÈ¼«³ÈÄ¥¤À¤±¤Ë¡¢¤½¤ì¤é¤ÎÇÛÃÖÊýË¡¤Ë¤ÏÁ´¤¯¸ß´¹À­¤¬¤Ê¤¯¡¢·¿¤Î¼ïÎऴ¤È¤Ë¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ò½¸¤á¤ë¡Ê¤¹¤Ê¤ï¤ÁÀë¸À¤É¤ª¤ê¤Î½ç½ø¤Ë¤Ê¤é¤Ê¤¤¡Ë¾ì¹ç¤â¿¤¯¸«¤é¤ì¤Þ¤¹¡£

¤µ¤ÆC++¤Ç¤¹¤¬¡¢¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ë¤Ïint°Ê³°¤Ë¡¢char¡¢short¡¢long¡¢bool¤ª¤è¤ÓÎóµó·¿¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£signed¤âunsigned¤âÉÕ¤«¤Ê¤¤char¡¢short¡¢int¡¢long¤Î¾ì¹ç¤ÏÉ乿ÉÕ¤­¤«É乿¤Ê¤·¤«¤Ï¤ä¤Ï¤ê½èÍý·ÏÄêµÁ¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤³¤Î¤è¤¦¤Ë¡¢C++¤Ç¤ÏC¤è¤ê¤Ï¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î·¿¤Î¼«Í³ÅÙ¤¬Áý¤·¤Þ¤·¤¿¤¬¡¢ÇÛÃ֤θߴ¹À­¤È¤¤¤Ã¤¿´ÑÅÀ¤«¤é¤Ï²¿¤é¾õ¶·¤¬ÊѤï¤ê¤Þ¤»¤ó¡£¤½¤³¤Ç¡¢¤³¤³¤Ç¤ÏC++¤Ê¤é¤Ç¤Ï¤ÎÊýË¡¤òÍѤ¤¤Æ¡¢°Ü¿¢À­¤Î¤¢¤ë¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Îµ­½ÒÊýË¡¤ò¤´¾Ò²ð¤·¤Þ¤¹¡£

¤Þ¤º¤Ï²¼¤Î¥³¡¼¥É¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£

#include <limits>
#include <cstddef>

template <typename T, std::size_t Base, std::size_t Length>
class bitfield
{
    typedef std::numeric_limits<T> limits;
    static int force_unsigned_[limits::is_specialized && limits::is_integer && !limits::is_signed ? +1 : -1];
public:
    typedef T value_type;
    static const std::size_t base = Base;
    static const std::size_t length = Length;
    static const T mask = Length < std::numeric_limits<T>::digits ? (T(1) << length) - 1 : ~T(0);

    explicit bitfield(T* ptr = 0) : ptr_(ptr) {}
    operator T() const
    {
        return (*ptr_ >> base) & mask;
    }
    bitfield& operator=(T value)
    {
        *ptr_ = (*ptr_ & ~(mask << base)) | ((value & mask) << base);
        return *this;
    }
private:
    T* ptr_;
};



¾å¤Î¥³¡¼¥É¤Ïbitfield¥¯¥é¥¹¥Æ¥ó¥×¥ì¡¼¥È¤ÎÄêµÁ¤Ç¤¹¡£¤³¤³¤Ç¤ÏÀâÌÀ¤Î¤¿¤á¤ÎºÇ¾®¸Â¤Î¼ÂÁõ¤·¤«¹Ô¤Ã¤Æ¤¤¤Þ¤»¤ó¤¬¡¢¤À¤¤¤¿¤¤¤Î¥¤¥á¡¼¥¸¤òÄϤó¤Ç¤¤¤¿¤À¤±¤ì¤Ð¤è¤¤¤«¤È»×¤¤¤Þ¤¹¡£

¤½¤ì¤Ç¤Ï¥³¡¼¥É¤Î¾ÜºÙ¤ò²òÀ⤷¤¿¤¤¤È»×¤¤¤Þ¤¹¡£

¥Æ¥ó¥×¥ì¡¼¥È°ú¿ô¤ÎT¤Ï¥á¥â¥ê¥¢¥¯¥»¥¹¤Îñ°Ì¤È¤Ê¤ë·¿¤Ç¡¢É¬¤ºÉ乿¤Ê¤·À°¿ô·¿¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Base¤Ï¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î³«»Ï°ÌÃ֤ǡ¢ºÇ²¼°Ì¥Ó¥Ã¥È¤ò0¤È¤·¤¿Ï¢ÈÖ¤Çɽ¤·¤Þ¤¹¡£Length¤Ï¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥Ó¥Ã¥È¿ô¤Ç¤¹¡£

¥¯¥é¥¹ÄêµÁ¤ÎºÇ½é¤ÎÊý¤Ë¤¢¤ëforce_unsigned_ÀÅŪ¥á¥ó¥ÐÊÑ¿ô¤Ç¤¹¤¬¡¢¤³¤ì¤ÏÊÑ¿ô¤È¤¤¤¦¤è¤ê¡¢·¿T¤¬É乿¤Ê¤·À°¿ô¤Ç¤¢¤ë¤³¤È¤ò¶¯À©¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹¡£¤â¤·Â¾¤Î·¿¤òT¤Ë»ØÄꤹ¤ë¤È¡¢ÇÛÎóÍ×ÁǤ¬-1¤Ë¤Ê¤ê¡¢¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤¹¡£

bitfield¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ë¤Ï¥Ý¥¤¥ó¥¿¤ò»ØÄꤷ¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢»ØÄꤷ¤¿¥¢¥É¥ì¥¹¤ÎÆÃÄê¤Î¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ø¤Î¥¢¥¯¥»¥¹¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£

ÊÑ´¹´Ø¿ô¡Êoperator T¡Ë¤ÈÂåÆþ±é»»»Ò¤Ï¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ÎÃÍ¤ÎÆÉ¤ß½ñ¤­¤ò¹Ô¤¦¤¿¤á¤Î¤â¤Î¤Ç¤¹¡£¤³¤Î¤è¤¦¤Ë¤·¤Æ¤ª¤±¤Ð¡¢Ä̾ï¤ÎÊÑ¿ô¤ÈƱ¤¸¤è¤¦¤Ë¡¢¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ø¤ÎÆÉ¤ß½ñ¤­¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¤³¤Î¥³¡¼¥É¤Ï¡¢¤Þ¤À¤Þ¤ÀÀöÎý¤¹¤ë;ÃϤ¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤Î¤ªÏäϤޤ¿Ê̤ε¡²ñ¤Ë¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¡£


*1¡¡ISO/IEC 9899:1999¡ÊÄ̾ÎC99¡Ë¤Ç¤Ï_Bool¤â»ØÄê²Äǽ

Comment

Post a Comment









´ÉÍý¼Ô¤Ë¤À¤±É½¼¨¤òµö²Ä

Trackback

http://cppemb.blog17.fc2.com/tb.php/16-0ec9d51d

²¿¤âÌ󫤵¤ì¤Ê¤¤¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É

I/O¥Ý¡¼¥È¤Ê¤É¤ÎÁàºî¤Ë¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ò»È¤Ã¤Æ¤¤¤ëÊý¤Ï¿¤¤¤È»×¤¤¤Þ¤¹¡£¥Ó¥Ã¥Èñ°Ì¤ÇÁàºî¤¬¤Ç¤­¤ë¤ï¤±¤Ç¤¹¤«¤é¡¢I/O¥Ý¡¼¥È¤ÎÁàºî¤Ë¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤¬»È¤¨¤ë¤ÈÈó¾ï¤ËÊØÍø¤Ê¤Î¤Ï³Î¤«¤Ç¤¹¡£¤·¤«¤·¡¢I/O¥Ý¡¼¥È¤ÎÁàºî¤ËºÇ¤âŬ¤µ¤Ê¤¤¤Î¤¬¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ê¤Î¤Ç¤¹¡£¤Þ¤º¡¢¥Ó¥Ã¥ ...

°Ü¿¢À­¤Î¤¢¤ëC¥×¥í¥°¥é¥ß¥ó¥° ¡§ 2006-04-21¡¡01:32

¥Ó¥Ã¥È¤Ë¤Ä¤¤¤Æ

¥Ó¥Ã¥È¥Ó¥Ã¥È¡Êbit¡Ë¤Ï¡¢¤Û¤È¤ó¤É¤Î¥Ç¥¸¥¿¥ë¥³¥ó¥Ô¥å¡¼¥¿¤¬°·¤¦¥Ç¡¼¥¿¤ÎºÇ¾®Ã±°Ì¡£±Ñ¸ì¤Î binary digit ¡Ê2¿Ê¿ô»ú¡Ë¤Îά¤Ç¤¢¤ê¡¢2¿Ê¿ô¤Î1¤±¤¿¤Î¤³¤È¡£bit ¤Ï¡¢:en:John Tukey|John W. Tukey ¡Ê±Ñ¸ì¡Ë ¤¬1947ǯ1·î9Æü¤Î¥Ù¥ë¸¦µæ½ê¤Î¥á¥â¤Ë¡Èbinary di ...

ñ°Ì¤¬¤Ê¤¤¤ÈÉÔÊØ ¡§ 2007-03-26¡¡09:32

C++¤ÈÁȤ߹þ¤ß´Ä¶­ | Page Top¢¥

New >>
̾Á°¶õ´Ö
<< old
¥³¡¼¥ë¥Ð¥Ã¥¯
¥Ö¥í¥°Æâ¸¡º÷
RSS¥Õ¥£¡¼¥É