Ⅰ 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;
}