c語言移位運算子怎麼用,C語言移位運算子怎麼用?

2021-03-27 22:04:03 字數 6090 閱讀 4342

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...