1樓:匿名使用者
這是c++好吧。。。。算了c和c++的移位運算子都一樣
這個難道不對嗎,左移就是*2啊(不越界的話)
原理就是你把1110化成二進位制(000010001010110),然後每個位都向左移一位,最低位補0,次高位捨棄(最高位是符號位,不能動)
2樓:匿名使用者
x<<=1 相當於乘以2; 假如 x=8,對二進位制來說就是00001000,<<1 就是左移一位,移完之後是00010000,換成十進位制就是16。相當於乘以2。<<2 就是乘以4。
<<3 就是8.
3樓:荊耕順隆詞
|一.位邏輯運算子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作按位異與操作其值不變
c語言,移位運算子>>
4樓:匿名使用者
右移對符號位的處理和左移不同,對於有符號整數來說,比如int型別,右移會保持符號位不變,例如:10100110 >>5(假設字長為8位),則得到的是 11111101。
總之,在c中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變.實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比迴圈效率高很多.
所以,short a=0xf245,即a=1111001001000101,經過右移後,b=a>>8;b=1111111111110010,即b=0xfff2。注意是有符號右移為算術右移!!!
c語言位操作運算子 &,|,~,^,<<,>>是幹什麼的?
5樓:匿名使用者
& 按位與運算,如:1010 & 1100 = 1000| 按位或運算,如:1010 & 1100 = 1110~ 非運算,如:
a = 1010; ~a = 0101《左移,如:1110 << 1 = 1100>>右移,如:1000 >> 1 = 0100
6樓:善緣戀
當然是操作位了 任何資料都是以二進位制形式儲存的 位操作運算子就是直接對二進位制進行操作
7樓:匿名使用者
&,|,~,^,<<,>>是按位「與、或、非、異或、左移、右移」,這些操作都是按照二進位制來計算的。
8樓:匿名使用者
&,|,~,^,<<,>>分別是與、或、非、異或、小於、大於符號
9樓:匿名使用者
& 按位與運算,| 按位或運算,~ 非運算,《左移,>>右移
10樓:長移動客戶經理
>>右移,如:1000 >> 1 = 1100
在c語言中移位運算子<<,>>,
11樓:匿名使用者
沒有你想要的運算子,
可以用下面的方法實現
到底是 % 1000 還是% 100 , 可以用 位數算出來5696 % 1000 = 696
696 % 100 =96
12樓:蔣小鵬的的
a<<=1; a左移1位等效於a=a*2a<<=2; a左移2位等效於a=a*2的2次方(4)a<<=3; a左移1位等效於a=a*2的3次方(8)計算機內程式設計只識別1和0,十進位制需變成2進位制才能使用移位運算子《和》,望採納!
13樓:噠噠啊如同一條
這個叫運算子過載。有難度啊。
c語言中左移運算子的問題
14樓:
void main()
void main()
15樓:樸丹樊鳥
a沒有變啊,b=a
<<3的意思是把a左移後的結果賦值給b就像b
=a+3;
b的值是a+3但是a本身沒有加3的!
16樓:匿名使用者
#include"stdio.h"
void main()
#include"stdio.h"
void main()
17樓:
char ch='e'; 十六進位制0x65'e' 等於 二進位制 0110 0101
ch=ch<<4;
左移4位 得 二進位制 0101 0000
(高位0110 溢位, 自動丟失)
賦還到ch裡.
二進位制 0101 0000 是 p, 十六進位制 0x50#include
void main()
c語言三目運算子怎麼用
18樓:天雲一號
c語言中只有一個三目運算子,就是條件運算子(? :)條件運算子的一般使用格式如下:
表示式1 ? 表示式2 : 表示式3
舉例如下:
max = (a>b) ? a : b; // 取變數a, b中較大的一個,並賦值給變數max
19樓:匿名使用者
三目運算子為a?b:c即有三個參與運算的量。由條件運算子組成條件表示式的一般形式為:
表示式1? 表示式2: 表示式3
其求值規則為:如果表示式1的值為真,則以表示式2 的值作為條件表示式的值,否則以表示式2的值作為整個條件表示式的值。 條件表示式通常用於賦值語句之中。
例如條件語句:
if(a>b) max=a;
else max=b;
可用條件表示式寫為 max=(a>b)?a:b; 執行該語句的語義是:如a>b為真,則把a賦予max,否則把b 賦予max。
使用條件表示式時,還應注意以下幾點:
1. 條件運算子的運算優先順序低於關係運算子和算術運算子,但高於賦值符。因此 max=(a>b)?a:b可以去掉括號而寫為 max=a>b?a:b
2. 條件運算子?和:是一對運算子,不能分開單獨使用。
3. 條件運算子的結合方向是自右至左。
例如:a>b?a:c>d?c:d應理解為
a>b?a:(c>d?c:d) 這也就是條件表示式巢狀的情形,即其中的表示式3又是一個條
件表示式。
void main(){
int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d",a>b?a:b);
20樓:匿名使用者
三目運算子是?:結構的運算
所謂三目就是需要三個變數對能進行運算的操作舉個簡單的例子:
a=2>1?3:4
可分成幾個部分,用括號分開:
(a=)(2>1)?(3):(4)
最左邊是賦值操作
第二個部分是一個判斷
第三和第四部分是兩個常數
首先判斷第三部分是否成立,成立即選擇第三部分,否則選擇第四部分像上面那個2>1成立,所以就執行了a=3
這種運算還可以巢狀
比如判斷year是不是閏年,是則返回1,不是返回0year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0)
21樓:
不帶括號,實際上是這樣的效果(","優先順序略低,一般都是最後執行咯)。
temp<=n ? (temp *= 2,m++):(temp = (temp-n)*2-1),m++;
也就是說,不帶括號,你temp<=n成立時候,m++總是會執行兩次,當然對於temp>n是沒問題的。
帶括號,自己比較好理解。
然後,你如果想寫的高大上,簡單點又正確,可以只加後面一個括號。即下面的方式。
temp<=n ? temp *=2,m++:(temp=(temp-n)*2-1,m++)
個人是非常不建議這麼些,**給別人看挺麻煩。
22樓:匿名使用者
三目運算: 條件?值1:值2,是根據條件的值分別值1或值2
對於本題就是依據你的取值,分別取(temp *= 2, m++) 和(temp = (temp - n)*2-1, m++)
若把?:中:前後的兩個()去掉,會出現錯誤!
c語言運算子與表示式問題,C語言運算子與表示式問題
x 是 在本句中先將來x的值 1,然後 使用自 1後的值 y 是先使用原值,然後在以後使用 1的值這樣在printf語句中 x即 4,y 為3但是 x,y 是一個表示式,只能有一個值,這個值是3,因為取的是逗號運算子後的值作為整個表示式的值 逗號運算子的性質如此 而z 2則作為臨時變數值顯然是3 所...
C語言逗號的作用C語言中逗號運算子怎麼用
c語言中,多個表示式可 以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後一個表示式的值。假設b 2,c 7,d 5,a1 b,c d 3 a2 b,c d 3 對於第一行 有三個表示式,用逗號分開,所以最終的值應該是最後一個表示式的值,也就是d 3,為8,所以a1 8。對於第...
c語言中卻運算子如何使用,C語言中取反運算子如何使用
c語言經典例子之按位取反運算子 運算子 是邏輯非運算子 才是按位取反運算子。經過 運算後,回運算結果只答 有0或1 而經過 運算後,結果有多種,取決於運算元。下面通過例項來介紹這個運算子的使用方法 int a 10,b,c b a 運算後b 0,因為a不等於0 即為真 所以取非後等於0 為假 c a...