c语言mask函数 python mask函数

C语言中的位屏蔽(bit masking)是怎么回事

位屏蔽的含义是从包含多个位集的一个或一组字节中选出指定的一(些)位。为了检查一个字节中的某些位,可以让这个字节和屏蔽字(bit mask)进行按位与操作(C的按位与运算符为&)——屏蔽字中与要检查的位对应的位全部为1,而其余的位(被屏蔽的位)全部为0。例如,为了检查变量flags的最低位,你可以让flags和最低位的屏蔽字进行按位与操作:

创新互联建站是专业的明水网站建设公司,明水接单;提供成都做网站、网站制作、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行明水网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

flags1;

为了置位所需的位,可以让数据和屏蔽字进行按位或操作(C的按位或运算符为|)。例如,你可以这样置位flags的最低位:

flags = flags | 1;

或者这样:

flags |= 1;

为了清除所需的位,可以让数据和对屏蔽字按位取反所得的值进行按位与操作。例如,你可以这样清除flags的最低位:

flags = flags ~1;

或者这样:

flags=~1 ;

有时,用宏来处理标志会更方便,例10.2中的程序就是通过一些宏简化了位操作。

例10.2 能使标志处理更方便的宏

/* Bit Masking * /

/ * Bit masking can be used to switch a character

between lowercase and uppercase * /

#define BIT_POS(N) ( 1U �0�0(N) )

#define SET_FLAG(N,F) ( (N) | = (F) )

#define CLR_FLAG(N,F) ( (N) = - (F) )

#define TST_FLAGCN,F) ( (N) (F) )

#define BIT_RANGE(N,M) ( BIT_POS((M) + 1- (N))-1(N))

#define BIT_SHIFTL(B,N) ( (unsigned)(B)�0�0(N) )

#define BIT_SHIFTR(B,N) ( (unsigned)(B)�0�3(N) )

#define SET_MFLAG(N,F,V) ( CLR_FLAG(N,F), SET_FLAG(N,V) )

#define CLR_MFLAG(N,F) ( (N) = ~(F) )

#define GET_MFLAG(N,F) ( (N) (F) )

# include stdio. h

void main()

{

unsigned char ascii_char = 'A'; /* char = 8 bits only */

int test_nbr = 10;

printf("Starting character = %c\n" , ascii_char);

/" The 5th bit position determines if the character is

uppercase or lowercase.

5th bit = 0 - Uppercase

5th bit = 1- Lowercase * /

printf ("\nTurn 5th bit on = %c\n" , SET_FLAG(ascii_char, BIT_POS(5)));

printf ("Turn 5th bit off = %c\n\n",CLR_FLAG(ascii_char, BIT_POS(5)));

printf ("Look at shifting bits\n");

printf (" = = = = = = = = = = = = = = = =\n" );

printf ("Current value = %d\n" , test_nbr)i

printf ("Shifting one position left = %d\n" ,

test_nbr = BIT_SHIFTL(test_nbr, 1) );

printf ("Shifting two positions right = %d\n" ,

BIT_SHIFTR(test_nbr, 2) );

}

宏BIT_POS(N)能返回一个和N指定的位对应的屏蔽字(例如BIT_POS(O)和BIT_POS(1)分别返回最低位和倒数第二位的屏蔽字),因此你可以用

#define A_FLAG BIT_POS(12)

#define A_FLAG BIT_P0S(13)

代替

#define A_FLAG 4096

#define A_FLAG 8192

这样可以降低出错的可能性。

宏SET_FLAG(N,F)能置位变量N中由值F指定的位,而宏CLR_FLAG(N,F)则刚好相反,它能清除变量N中由值F指定的位。宏TST_FLAG(N,F)可用来测试变量N中由值F指定的位,例如:

if (TST_FLAG (flags, A_FLAG))

/* do something * /;

宏BIT_RANGE(N,M)能产生一个与由N和M指定的位之间的位对应的屏蔽字,因此,你可以用

# define FIRST_OCTAL_DIGIT BIT_RANGE (0,2) /*111"/

# define SECOND-OCTAL-DIGIT BIT-RANGE(3,5) /* 111000*/

代替

#define FIRST_OCTAL_DIGIT 7 /*111*/

#define SECOND_OCTAL_DIGIT 56 /* 111000 * /

这样可以更清楚地表示所需的位。

宏BIT_SHIFT(B,N)能将值B移位到适当的区域(从由N指定的位开始)。例如,如果你用标志C表示5种可能的颜色,你可以这样来定义这些颜色:

#define C_FLAG BIT-RANGE(8,10) /* 11100000000 */

/* here are all the values the C flag can take on * /

# define C_BLACK BIT-SHIFTL(0,8) /* ooooooooooo */

# define C-RED BIT_SHIFTL(1,8) /* 00100000000 */

# define C-GREEN BIT_SHIFTL(2,8) /* 01000000000 */

# define C-BLUE BIT-SHIFTL(3,8) /* 01100000000 */

# define C_WHITE BIT-SHIFTL(4,8) /* 10000000000 */

# defineC-ZERO C-BLACK

# defineC-LARGEST C-WHITE

/* A truly paranoid programmer might do this */

#if C_LARGEST C_FLAG

Cause an error message. The flag C_FLAG is not

big enough to hold all its possible values.

#endif /* C_LARGEST C_FLAG */

宏SET_MFLAG(N,F,V)先清除变量N中由值F指定的位,然后置位变量N中由值V指定的位。宏CLR_MFLAG(N,F)的作用和CLR_FLAG(N,F)是相同的,只不过换了名称,从而使处理多位标志的宏名字风格保持一致。宏GET_MFLAG(N,F)能提取变量N中标志F的值,因此可用来测试该值,例如:

if (GET_MFLAG(flags, C_FLAG) == C_BLUE)

/*do something */;

注意:宏BIT_RANGE()和SET_MFLAG()对参数N都引用了两次,因此语句

SET_MFLAG(*x++,C_FLAG,C_RED);

的行为是没有定义的,并且很可能会导致灾难性的后果。

求c语言将十进制数转换为16进制的函数

c语言将十进制数转换为16进制的函数:

#includestdio.h

main()

{

int u10;

char u16[10];

int w=0,a,b,i;

printf("请输入一个数字--");

scanf("%d",u10);

if(u10==0)

{

u16[0]='0';

w++;

}

else

{

a=u10;

while(a)

{

b=a%16;

if(b10)

{

u16[w]='0'+b;

}

else

{

u16[w]='A'+b-10;

}

a=a/16;

w++;

}

}

printf("\n");

printf("%d(10)转换为16进制数字为:",u10);

for(i=w-1;i=0;i--)

{

printf("%c",u16[i]);

}

printf("\n");

}

扩展资料:

十进制数转换为二进制数方法

十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。

1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

2.十进制小数转换为二进制小数

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

参考资料:

百度百科-十进制

C语言中的标准函数有哪些?

C语言输入输出函数有很多,标准I/O函数中包含了如下几个常用的函数:

scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.

int

getc(FILE

*fp)

getc主要是从文件中读出一个字符.常用的判断文件是否读取结束的语句为

(ch

=

getc(fp))

!=

EOF.EOF为文件结束标志,定义在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlib.h中一样,文件也可以被理解为一种流,所以当fp为stdin时,getc(stdin)就等同于getchar()了.

int

putc(int

ch,FILE

*fp)

putc主要是把字符ch写到文件fp中去.如果fp为stdout,则putc就等同于putchar()了.

int

getchar(void)

getchar主要是从标准输入流读取一个字符.默认的标准输入流即stdio.h中定义的stdin.但是从输入流中读取字符时又涉及到缓冲的问题,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符串放在缓冲区中,getchar就是在缓冲区中一个一个的读字符.当然也可以在while循环中指定终止字符,如下面的语句:while

((c

=

getchar())

!=

'#')这是以#来结束的.

int

putchar(int

ch)

putchar(ch)主要是把字符ch写到标准流stdout中去.

char

*

gets(char

*str)

gets主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去.

int

puts(char

*str)

puts主要是把字符串str写到标准流stdout中去,并会在输出到最后时添加一个换行符.

char

*fgets(char

*str,

int

num,

FILE

*fp)

str是存放读入的字符数组指针,num是最大允许的读入字符数,fp是文件指针.fgets的功能是读一行字符,该行的字符数不大于num-1.因为fgets函数会在末尾加上一个空字符以构成一个字符串.另外fgets在读取到换行符后不会将其省略.

int

fputs(char

*str,

file

*fp)

fputs将str写入fp.fputs与puts的不同之处是fputs在打印时并不添加换行符.

int

fgetc(FILE

*fp)

fgetc从fp的当前位置读取一个字符.

int

fputc(int

ch,

file

*fp)

fputc是将ch写入fp当前指定位置.

int

fscanf(FILE

*fp,

char

*format,

输入列表)

fscanf按照指定格式从文件中出读出数据,并赋值到参数列表中.

int

fprintf(FILE

*fp,

char

*format,

输出列表)

fprintf将格式化数据写入流式文件中.

数据块读写函数

fread

(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

参数说明:

buffer:是一个指针。

对fread

来说,它是读入数据的存放地址。

对fwrite来说,是要输出数据的地址(均指起始地址)。

size:

要读写的字节数。

count:

要进行读写多少个size字节的数据项。

fp:

文件型指针。

linux编程中mask是什么意思呀?

Enable:允许中断,默认为unmask if NULL

Disable:禁止中断,默认为mask if NULL

Mask:mask 一个中断源,通常是关闭中断

mask_ack:响应并mask中断源

unmask:unmask中断源

例如

irq_desc[irq].mask = PCF50606_mask_irq;

irq_desc[irq].unmask = PCF50606_unmask_irq;

//mask,unmask函数与enable_irq/disable_irq对应,把使能禁止中断对应到设置pcf50606中断mask中

C语言位运算求解

//取第n1到n2的位的值,第n1位的权比第n2的权高,

int getbits(short int value, int n1, int n2)

{

short int mask = 1;

int t;

if(n2n1) // 如果n2比n1小,则交换

{

t=n2;

n2=n1;

n1=t;

}

int len = n2-n1; // 要取值多少位

for(int i=0;i=len;i++)

{

mask = 1;//移动一位

mask |= 1; //把最后一位补0的值,改成值1

}

mask = 16 - n2;// 生成可以用来屏蔽不需要的位的数据

value =mask; // 只保留需要的位

return value;

}

有什么不明白,找偶,再加点分吧,哈哈


网站栏目:c语言mask函数 python mask函数
当前网址:http://azwzsj.com/article/hgihjp.html