Ⅰ c语言的按位运算符怎么操作!
位运算
在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能,
这使得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(){
int
a=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(){
int
a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
3.
按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:
00001001^00000101
00001100
(十进制为12)
main(){
int
a=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
取决于编译系统的规定。Turbo
C和很多系统规定为补1。
main(){
unsigned
a,b;
printf("input
a
number:
");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d\n",a,b);
}
请再看一例!
main(){
char
a='a',b='b';
int
p,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语言中位操作
首先32位系统-3默认为整形占4字节(32个位),二进制表示11111111 11111111 11111111 11111101得来方法:
3的二进制位00000000 00000000 00000000 00000011,取反补1后等到上面的值
再看下-1的二进制11111111 11111111 11111111 11111111同样是1取反后补1
下面看下移位因为第一位为1,右移时根据最高位补位,移1位后值为:
11111111 11111111 11111111 11111110
再移动1位就变成了:11111111 11111111 11111111 11111111后面不管你右移多少次始终是这个结果,所以-3右移2次以上后值就是-1了。
Ⅲ c语言中如何设置第n位的值
这个可以用位运算实现,与和或运算就可以了!
比如你想对数0XFF中的第二位置成0,那么可以写成0XFF&&0XFD即可对第二位置0了
Ⅳ 怎样用C语言把一组数字调动位置
可以根据你的需要选择不同的方法,例如调换两个数的位置,那就直接交换就可以啦,如果是要把i位置的数插入到j位置,就可以用插入法,其他数做下顺序移动。等等。
Ⅳ C语言中怎样表示移位啊例如将某个值左移两位
利用位操作:"<<"就是左移 ">>"就是右移
举个例子:将a左移2位,然后赋给a
a<<=2 也即是a=a<<2
在C语言中左移1位,相当于乘2,右移相当于除2。
Ⅵ C语言中怎样表示移位
利用位操作:"<<"就是左移 ">>"就是右移
举个例子:将a左移2位,然后赋给a
a<<=2 也即是a=a<<2
在C语言中左移1位,相当于乘2,右移相当于除2。
Ⅶ c语言置位操作
对不起确实没看清题,修改一下:
state |= 0x400; //将第10位用bitwise or置位
state &= ~(0x8000); //将第15位用bitwise and清除,因为state的类型不详,先用~将0x8000取反
printf( "state第10位的值为%d.", (state & 0x400 ?1:0) ); //用and提取第10位
另外,我这里printf输出是1,还请检查是否键入正确,如果不对,请试试将其中 state & 0x400 用括号括住,即 printf( "state第10位的值为%d.", ((state & 0x400)?1:0) );
或者采用移位的方法,即 printf( "state第10位的值为%d.", state>>10) );
Ⅷ C语言位运算,怎样修改每一位的值呢
这个就要用到位运算了
比如lz说的,就应该是ch^(1<<2)
用二进制表示的话,就是
0000 0000 0000 0001 <<2
0000 0000 0000 0100
然后
0000 0000
^ 0000 0100
----------------
0000 0100
Ⅸ C语言中将一个四位数的千位和个位对调
思路:分别得到这个四位数的千位、百位、十位、个位,结果等于个位*1000+百位*100+十位*10+千位
代码为:
#include<stdio.h>
int main(){
int num = 2568;
int thousand = num /1000;
int hundred = num%1000/100;
int ten = num%1000%100/10;
int one = num%100%100%10;
printf("原数字为:%d,转换后为:%d ",
num,one*1000+hundred*100+ten*10+thousand);
}
Ⅹ c语言中输入一个六位整数怎样将它的千位与十位调换后输出
#include "stdio.h"
int main()
{ int a,b,c;
scanf("%d",&a);
b=a%10000/1000;
c=a%100/10;
a=a-b*1000-c*10+b*10+c*1000;
printf("%d ",a);
return 0;
}