① c语言位运算掩码
一、位运算符c语言提供了六种位运算符:
&按位与
|按位或
^按位异或
~取反
<<左移
>>右移
1.按位与运算按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下:00001001(9的二进制补码)&00000101(5的二进制补码)00000001(1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a的高八位清0,保留低八位,可作a&255运算(255的二进制数为0000000011111111)。
main(){
inta=9,b=5,c;
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
2.按位或运算按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下:00001001|00000101
00001101(十进制为13)可见9|5=13
main(){
inta=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
3.按位异或运算按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:00001001^0000010100001100(十进制为12)
main(){
inta=9;
a=a^15;
printf("a=%d\n",a);
}
4.求反运算求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。例如~9的运算为:~(0000000000001001)结果为:1111111111110110
5.左移运算左移运算符“<<”是双目运算符。其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,
高位丢弃,低位补0。例如:a<<4指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。6.右移运算右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设a=15,a>>2表示把000001111右移为00000011(十进制3)。应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。turboc和很多系统规定为补1。
main(){
unsigneda,b;
printf("inputanumber:");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d\n",a,b);
}
请再看一例!
main(){
chara='a',b='b';
intp,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}
② c语言中怎样用掩码判断二进制正负
用掩码的话,如果是16位整数x,
可以这样:
if(x&0x8000)printf("%d是一个负数\n",x);
else printf("%d不是一个负数\n",x);
如果是32位整数x,
可以这样:
if(x&0x80000000)printf("%d是一个负数\n",x);
else printf("%d不是一个负数\n",x);
③ 急急急!!!C语言求子网掩码
我也要,急求,有能者顺便发至[email protected]
④ 写出以下运算的16位掩码和C语言语句
1)
二进制斗薯咐掩码=0010001010100000,十六进制掩码空纯=22a0
清0算法,即上述掩码取反然后与PortB进行与操作:PortB&=(~0x22a0);
置1算法,即上述掩码与PortB进行或运算:PortB|=0x22a0;
求反算法,即上述手差掩码与PortB进行异或运算:PortB^=0x22a0;
2) 掩码:1000010010010000B=8490H
PortC&=(~0x8490); PortC|=0x8490; PortC^=0x8490;
⑤ C语言掩码问题 # define RED 1 # define BLUE 4 # define
这个要看每种颜色的具体定义方式
按常用的32位带alpha通道的RGB颜色定义
0x12 34 56 78
12为alpha通道,34为red,56为green,78为blue
白色即升拍塌为0xffffffff,贺氏白光是光三原色以最吵圆高亮度混合得到的
也就是R=0xff, G=0xff, B=0xff,alpha通道不用管就为0xff
那么对RGB进行按位或运算就可以得到
color = alpha | R | G | B = 0xff ff ff ff
⑥ 关于C语言定义掩码
1、比如定义一个数
int a=0x1111
(unsigned int male=0x4)那么 a|male 的值就是0001 0001 00010101 只有第三位影响了
unsigned int male=0xFF 那么 a|male 的值就是111111111 0001 0001 后8位值不变
2、例程:
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#defineMAX_PASSWD_LEN20
char*GetPasswd(charpasw[]){
unsignedcharch;
inti=0;
while((ch=_getch())!=' '){
if(i>0&&ch==''){
--i;
putchar('');
putchar('');
putchar('');
}
elseif(i<MAX_PASSWD_LEN&&isprint(ch)){
pasw[i++]=ch;
putchar('*');
}
}
putchar(' ');
pasw[i]='