3748 位操作

問題概要

与えられた16進数の数字(32ビット整数に収まる)の、
xビット目を0に、
yビット目から3桁を110に変更せよ。

解法

16進数の入力を取る(or出力のときはprintf)には、
scanf("%x",&a)が便利である。

ビットのオンにはa|=1<<a,
ビットのオフにはa&=~(1<<a)を使うと便利。

ソースコード

int main()
{
	int r,x,y;
	scanf("%x,%d,%d",&r,&x,&y);
	r&=~(1<<x|1<<y-2);
	r|=1<<y|1<<y-1;
	printf("%x\n",r);
	return 0;
}