¡¾×ª¡¿CµÄÁíÒ»ÖØÒªÊý¾Ý½á¹¹bit fields
½ñÌì¿´K&RµÄÊéµÄʱºò˳±ãÎÂϰÁËCµÄÁíÒ»ÖØÒªÊý¾Ý½á¹¹bit-fields£¬ÎÒÏëbit-fieldsÔÚ±àдµ×²ãÇý¶¯
Çý¶¯³ÌÐòµÄʱºòÓ¦¸Ã±È½ÏºÃÓã¬Ëü¿ÉÒÔÈÆ¿ª"&"ºÍ"|"½øÐÐλ²Ù×÷£¬¶øÇÒ¸ü¼Ó½ÚÔ¼ÄÚ´æ¿Õ¼ä¡£·Ï»°²»¶à˵
ÁË£¬»¹ÊÇÏÈÀ´¿´¿´ËüµÄÕæÃæÄ¿°É£º
bit-fieldÀ´Ô´:
bit-fieldÊÇΪÁ˽ÚÔ¼´æ´¢¿Õ¼ä¶ø´´ÔìµÄÒ»ÖÖÊý¾Ý½á¹¹(to pack several objects into a single
machine word)
bit-fieldÓÃ;:
Externally-imposed data formats,such interfaces to hardware
devices,also often
require the ability to get a pieces of a word
¶¨Òå·½·¨:
struct (tag) {
bit-field list ~~~
} bit-field variable list;
Óɶ¨Òå·½·¨¿É¼û£¬bit-fieldÒ²ÊÇÒÔstructureµÄÐÎʽ×éÖ¯ÆðÀ´µÄÊý¾Ý½á¹¹£¬Ö»²»¹ýÊÇÒÔ¶þ½øÖƽøÐзַ¢
µÄ¶øÒÑ¡£ÆäÖÐbit-field list±íʾ·½·¨£º type fieldnamme:width;
width:fieldµÄ¿í¶È£¬ÒÔbit
±íʾ£¬»¹ÊǾٸöÀý×ÓÀ´¿´°É£º
struct bf{
unsigned int is_keyword:1;
unsigned int is_extern:1;
unsigned int is static:1;
}flags;
¶¨ÒåÁËÒ»¸öbit-field±äÁ¿flags£¬Ëü°üÀ¨3¸ö1-bitµÄfield£¬·ÃÎÊbit-fieldÆäʵºÍ·ÃÎÊÒ»°ãÊý¾Ý½á
¹¹µÄ³ÉÔ±Ò»Ñù£¬ÀýÈ磺
flags.is_static=0;
ÔÚ¶¨Òåbit-fieldµÄʱºò£¬ÓÐÒÔϼ¸µãҪעÒâ(K&R°æ±¾µÄ¹Ûµã)
1¡¢Almost everything about fields is implemention-dependent !
Whether a field may
overlap a word boundary is implemention-defined.
2¡¢Fields can only be declared as intS,for protability,specify
signed or unsigned
explicitly.
3¡¢unnamed field can be used for padding£¨Ã»ÓÐÃû×ÖµÄfield¿ÉÒÔÓÃÀ´×÷ΪÌî³ä»òÕßµ÷ÕûÓÃ)
ÀýÈ磺
struct bf{
unsigned int a:2;
unsigned int :4; /*¸Ã4λ²»ÄÜÓÃ*/
unsigned int b:2;
};
4¡¢Special width 0 may be used to force alignment at the next word
boundary.
(Èç¹ûwidth=0µÄ»°£¬ÄÇôÏÂÒ»¸öfield¾Í±»Ç¿ÖÆ´æ·ÅÔÚÏÂÒ»¸öÄÚ´æµ¥ÔªÀïÃæÁË),ÀýÈç:
struct bf{
unsigned int a:2;
unsigned int :0; /*¿ÕµÄfield*/
unsigned int b:2
Ïà¹ØÎĵµ£º
1¡¢¿ìËÙ³õʼ»¯
char *str = new [size];
str[0]='\0';
2¡¢memcpyµÄÃîÓÃ
ÊÔÌâ6£ºÒÑÖªWAVÎļþ¸ñʽÈçÏÂ±í£¬´ò¿ªÒ»¸öWAVÎļþ£¬ÒÔÊʵ±µÄÊý¾Ý½á¹¹×éÖ¯WAVÎļþÍ·²¢½âÎöWAV¸ñʽµÄ¸÷ÏîÐÅÏ¢¡£
WAVEÎļþ¸ñʽ˵Ã÷±í
Æ«ÒÆµØÖ· ×Ö½ÚÊý Êý¾ÝÀàÐÍ ÄÚ ÈÝ
ÎļþÍ·
00H 4 Char "RIFF"±êÖ¾
......
c/c++Ö§³Ö¿É±ä²ÎÊýµÄº¯Êý£¬¼´º¯ÊýµÄ²ÎÊýÊDz»È·¶¨µÄ¡£
Ò»¡¢ÎªÊ²Ã´ÒªÊ¹Óÿɱä²ÎÊýµÄº¯Êý£¿
Ò»°ãÎÒÃDZà³ÌµÄʱºò£¬º¯ÊýÖÐÐÎʽ²ÎÊýµÄÊýĿͨ³£ÊÇÈ·¶¨µÄ£¬ÔÚµ÷ÓÃʱҪÒÀ´Î¸ø³öÓëÐÎʽ²ÎÊý¶ÔÓ¦µÄËùÓÐʵ¼Ê²ÎÊý¡£µ«ÔÚijЩÇé¿öÏÂÏ£Íûº¯ÊýµÄ²ÎÊý¸öÊý¿ÉÒÔ¸ù¾ÝÐèҪȷ¶¨£¬Òò´ËcÓïÑÔÒýÈë¿É±ä²ÎÊýº¯Êý¡£ÕâÒ²ÊÇc¹¦ÄÜÇ¿´óµÄÒ»¸ö·½Ã棬ÆäËüÄ³Ð©Ó ......
¹ØÓڼǺÅÕ³Ìù²Ù×÷·û(token paste operator): ##
1. ¼òµ¥µÄ˵£¬“##”ÊÇÒ»ÖÖ·Ö¸ôÁ¬½Ó·½Ê½£¬ËüµÄ×÷ÓÃÊÇÏÈ·Ö¸ô£¬È»ºó½øÐÐÇ¿ÖÆÁ¬½Ó¡£
ÆäÖУ¬·Ö¸ôµÄ×÷ÓÃÀàËÆÓÚ¿Õ¸ñ¡£ÎÒÃÇÖªµÀÔÚÆÕͨµÄºê¶¨ÒåÖУ¬Ô¤´¦ÀíÆ÷Ò»°ã°Ñ¿Õ¸ñ
½âÊͳɷֶαêÖ¾£¬¶ÔÓÚÿһ¶ÎºÍÇ°Ãæ±È½Ï£ ......
#include<windows.h>
void Birthday();
int main()
{
Birthday();
return 0;
}
void Birthday()
{
unsigned frequency[]={392,392,440,392,523,494,
392,392,440,392,587,523,
......