1樓:天為嗲崇拜朕
在下例中,整數 1 向左移 10 位:
x = 1 << 10按位左移位運算的結果是 1024。這是因為十進位制的 1 等於二進位制的 1,二進位制的 1 向左移 10 位是二進位制的 10000000000,而二進位制的 10000000000 就是十進位制的 1024:
下例將 65535 轉換為 32 位整數,然後右移 8 位,結果為十進位制值 255:
var a:number = 65535 >> 8;
trace(a); // 255這是由於十進位制的 65535 等於二進位制的 00000000000000001111111111111111(十六個 0,後跟十六個 1);向右移 8 位將導致至少捨去 8 個最低有效位(最右邊的 8 位)。因為 65535 是正數,所以,通過移位而空出的位的位置(最左邊的 8 位)將填充 0。結果是二進位制的 00000000000000000000000011111111(二十四個 0,後跟八個 1),這表示 32 位整數 255。
位移的時候使用int,計算機在實際計算過程中轉化為二進位制資料,然後直接新增或者刪除資料。
這樣做的目的是因為位運算直接對於資料進行處理,相比使用*/等運算子可以更迅速,節省計算機開銷!
2樓:匿名使用者
1 0 0 1
0 1 0 1
上下2個數字,相異(不同)時,該位為1
所以1 1 0 0
c語言的按位運算子怎麼操作!?
3樓:匿名使用者
位運算在很多系統程式中常要求在位(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()
2. 按位或運算 按位或運算子「|」是雙目運算子。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有乙個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
例如:9|5可寫算式如下: 00001001|00000101
00001101 (十進位制為13)可見9|5=13
main()
3. 按位異或運算 按位異或運算子「^」是雙目運算子。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。
參與運算數仍以補碼出現,例如9^5可寫成算式如下: 00001001^00000101 00001100 (十進位制為12)
main()
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()
請再看一例!
main()
4樓:本科科長
簡單說,c程式設計的時候輸入的都是十進位制數字,但如果你要對二進位制數字進行運算,就要用這種按位運算的符號。此前編譯程式先要把十進位制變成二進位制,比如int x=67的二進位制是這樣的。
67->00000000 00000000 00000000 00100011
比如:&:有0則結果為0。 1&1=1, 其餘組合為0
比如67&1=1
|:有1則結果為1。 0|0=0, 其餘組合為1
比如67|1=67
^:異或。相反則為1
比如67^1=66
~取反: 1變0,0變1
比如67取反就變成了
11111111 11111111 11111111 11011100
也就是-66
>>:右移: 上面的就變成了00000000 00000000 00000000 00010001,也即33
<<:左移:上面的就變成了00000000 00000000 00000000 01000110,也即134
5樓:匿名使用者
&按位與,|按位或,^按位異或,-求補,>>左移,<<右移.與&一般用來將某數的某些位置零.
設二進位制是1101001的數,如果要將第四位置0,就拿它與11101111進行與
或|一般用來將兩個數合成,
比如00110011與11000000或的結果11110011異或^用來將某數的某些位取反
比如00011100將第三四位取反,就將它與00110000進行異或》左移,算術運算中是將某數除二,邏輯中是移位《右移,算術運算中是將某數乘二,邏輯中是移位如0001100邏輯左移2位0110000,1111100算術右移2位11111111,相當於除四-求補,求乙個數的相反數
6樓:標苦運先
c語言移位運算子怎麼用?
7樓:匿名使用者
這是c++好吧。。。。算了c和c++的移位運算子都一樣
這個難道不對嗎,左移就是*2啊(不越界的話)
原理就是你把1110化成二進位制(000010001010110),然後每個位都向左移一位,最低位補0,次高位捨棄(最高位是符號位,不能動)
8樓:匿名使用者
x<<=1 相當於乘以2; 假如 x=8,對二進位制來說就是00001000,<<1 就是左移一位,移完之後是00010000,換成十進位制就是16。相當於乘以2。<<2 就是乘以4。
<<3 就是8.
9樓:荊耕順隆詞
|一.位邏輯運算子1.~
按位取反
將1變為0,將0變為1
eg:~(10011010)
(01100101)2.&
按位取與
只有兩個運算元都是1結果才是1,否則為010=
00000000
00000000
00000000
0000101012=
00000000
00000000
00000000
00001100&8
=00000000
00000000
00000000
000010003.|
按位取或
兩個運算元任意一位為1結果就是110=
00000000
00000000
00000000
0000101012=
00000000
00000000
00000000
00001100|14
=00000000
00000000
00000000
000011104.^
按位異或
兩個運算元不同為1,相同為010=
00000000
00000000
00000000
0000101012=
00000000
00000000
00000000
00001100^14
=00000000
00000000
00000000
00000110
5.用法:掩碼
掩碼是通過&(位與)將某些位設定為開(1),將某些位設定為關(0)。將掩碼0看做不透明,將1看著透明。
6.用法:開啟位
開啟位是通過
|(位或)開啟乙個值的特定位,同時保持其他位的不變。這是因為和0位或都為0,和1位或都為1。
7.用法:關閉位
關閉某些位。
8.用法:轉置位
如果一位為1則轉置為0,如果一位為1則轉置為0
二.移位運算子
《左移左移運算子是把運算元的值的每一位向左移動,移動的位數有右邊的運算元決定,右側空出的位數用0填充
>>右移右移運算子是把運算元的值的每一位向右移動,移動的位數有右邊的運算元決定,左邊丟棄的位數用0填充
一、傳統的c方式位操作:
1.基本操作:
使用乙個unsigned
int變數來作為位容器。
2.操作符:
|按位或操作符:result=exp1|exp2;當exp1和exp2中對應位中至少有乙個為1時,result中對應位為1,否則為0。
&按位與操作符::result=exp1&exp2;當exp1和exp2中對應位全為1時,result中對應位為1,否則為0。
^按位異或或操作符:result=exp1^exp2;當exp1和exp2中對應位不相同時,result中對應位為1,否則為0。
~反轉操作符:將位容器中的所有位都反轉,1變為0,0變為1。
《按位左移操作符:exp<
>按位右移操作符:exp>>n,將容器中所有的位向右移n位,空出的位用0填充。
|=,&=,^=
分別對應|&^三種操作符的復合操作符。
3.常用操作
這裡我們假設有乙個result的unsigned
int變數用來儲存32個學生的成績(通過和不通過分別用0和1),這樣result就有33位(result從右至左,從0開始計算位數,在這個例子中0位被浪費)。
(a)將第27位設定為及格(設作1)其他位不變:
result|=(1<<27)
//任意的位值與1作按位或操作其值為1,而與0作按位與操作其值不變
(b)將第27位設定成不及格(設為0)。
result&=~(1<<27)
//任意的位值與0作按位與操作其值為0,而與1作按位與操作其值不變
(c)反轉第27位的值。
result^=(1<<27)
//任意的位值與1作按位異或操作其值為1,而與0作按位異與操作其值不變
以下運算子中優先順序最高的運算子是abc
a選項,看下圖 不用全部記住,記住平時比較常用的就行了,還有記住 算術運算子 關係運算子 邏輯運算子 賦值運算子 a a是邏輯運算子,但c語言中規定它的優先順序最高,b是算數運算子,d也是邏輯運算子,c是個賦值的,優先順序是!算術運算子 關係運算子 邏輯運算子 a 優先順序一般c語言的書後都有附表的...
c中邏輯運算子是或的意思,C 中運算子 和 用法
是 或者 的意思 是 並且 的意思 例如真 假 結果是真 假 假 結果是假 就是說只要其中一邊是真.條件就成立 真 假 結果是假 真 真 結果是真 就是說只要其中一邊不成立.條件就是假 有乙個是假的.那麼結果就是假的.所以兩邊都是假那麼結果肯定也是假的.假假為真?這不是異或,樓主不要天真了。那只能說...
下列運算子中優先順序最高的是ABC
應該選c。優先順序從高到低依次是 算術運算子 關係運算子 邏輯運算子 條件運算子 賦值運算子和逗號運算子。c語言選擇題 下列運算子中優先順序最高的是 a.b.c.c c 中 取餘 優先順序最高,和 優先順序相當 下列運算子中,優先順序最高的是 a,b,c,d,答案選a 邏輯反abcd選項的運算子的優...