GAIO CLUB
#include <stdio.h>
unsigned char UC;
unsigned int UI_1,UI_2;
void test1(void)
{
UI_1 = ~UC; /* ルール違反 */
UI_2 = (unsigned char)~UC; /* 直ちにキャスト */
}
void test2(void)
{
UI_1 = (~UC) >> 2; /* ルール違反 */
UI_2 = ((unsigned char)~UC) >> 2; /* 直ちにキャスト */
}
int main(void)
{
UC = 0xF0;
test1();
printf("test1\n");
printf(" UI_1 = ~UC -------------------------> 0x%8.8X\n",UI_1);
printf(" UI_2 = (unsigned char)~UC ----------> 0x%8.8X\n",UI_2);
test2();
printf("test2\n");
printf(" UI_1 = (~UC) >> 2 ------------------> 0x%8.8X\n",UI_1);
printf(" UI_2 = ((unsigned char)~UC) >> 2 ---> 0x%8.8X\n",UI_2);
return 0;
}
test1
UI_1 = ~UC -------------------------> 0xFFFFFF0F
UI_2 = (unsigned char)~UC ----------> 0x0000000F
test2
UI_1 = (~UC) >> 2 ------------------> 0xFFFFFFC3
UI_2 = ((unsigned char)~UC) >> 2 ---> 0x00000003
struct bit
{
unsigned char b1:1;
unsigned char b2:2;
unsigned char b3:3;
} bit_fields;
bit_fields.b1 = 0;
機械語例
mov.b _bit_fields,r0 ; 1byteリード
and #7F,r0 ; b1ビットを0に
mov.b r0,_bit_fields ; 1byte ライト
浅野 昌尚(あさの まさなお)
ガイオ・テクノロジー株式会社
開発1部 QTXグループ
1980年代から30年以上にわたり汎用構造のCコンパイラ開発に従事し、その間に8ビットマイコンからRISC・VLIW・画像処理プロセッサまで、さまざまなCPU向けのクロスCコンパイラを開発。