當前位置:首頁 » 編程語言 » c語言的按位賦值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言的按位賦值

發布時間: 2022-05-18 10:20:22

c語言「 &= |= 」是什麼意思

&(按位與)雙目運算,功能是參與運算的兩個數各對應的二進制位相與,只有對應的兩個二進制位均為1時,結果為1,否則為0; |(按位或)雙目運算,功能是參與運算的兩個數各對應的二進制位相或,只有對應的兩個二進制位有一個為1時,結果就為1。

「|」表示按位或,按位或運算符「|」是雙目運算符。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

(1)c語言的按位賦值擴展閱讀:

C語言的運算符主要用於構成表達式,同一個符號在不同的表達式中,其作用並不一致。下面按計算的優先順序,分別說明不同作用的表達式。需要特別指出,在C語言標准中,並沒有結合性的說法。

相同優先順序運算符,從左至右依次運算。注意後綴運算優先順序高於前綴。因此++i++應解釋為++(i++)。

而與或非的運算優先順序都不一樣,因此a && b || b && c解釋為(a && b) || (b && c)

合理使用優先順序可以極大簡化表達式。

② 在C語言中11種賦值運算符的具體含義,用法

1.=
賦值運算符
變數=表達式
如:a=3;將a的值賦為3
2./=
除後賦值
變數/=表達式
如:a/=3;即a=a/3
3.*=
乘後賦值
變數*=表達式
如:a*=3;即a=a*3
4.%=
取模後賦值
變數%=表達式
如:a%=3;即a=a%3
5.+=
加後賦值
變數+=表達式
如:a+=3;即a=a+3
6.-=
減後賦值
變數-=表達式
如:a-=3;即a=a-3
7.<<=
左移後賦值
變數<<=表達式
左移就是將《左邊的數的二進制各位全部左移若干位,《右邊的數指定移動位數,高位丟棄,低位補0,
移幾位就相當於乘以2的幾次方
8.>>=
右移後賦值
變數>>=表達式
右移運算符是用來將一個數的各二進制位右移若干位,移動的位數由右操作數指定(右操作數必須是非負值),移到右端的低位被舍棄,對於無符號數,高位補0。對於有符號數,某些機器將對左邊空出的部分用符號位填補(即「算術移位」),而另一些機器則對左邊空出的部分用0填補(即「邏輯移位」)。注意:對無符號數,右移時左邊高位移入0;對於有符號的值,如果原來符號位為0(該數為正),則左邊也是移入0。如果符號位原來為1(即負數),則左邊移入0還是1,要取決於所用的計算機系統。有的系統移入0,有的
系統移入1。移入0的稱為「邏輯移位」,即簡單移位;移入1的稱為「算術移位」。
9.&=
按位與後賦值
變數&=表達式
按位與是指:參加運算的兩個數據,按二進制位進行「與」運算。如果兩個相應的二進制位都為1,則該位的結果值為1;否則為0。這里的1可以理解為邏輯中的true,0可以理解為邏輯中的false。按位與其實與邏輯上「與」的運算規則一致。邏輯上的「與」,要求運算數全真,結果才為真。若,A=true,B=true,則A∩B=true
10.
^=
按位異或後賦值
變數^=表達式
參與運算的兩個量按照對應的位進行異或運算,且
0^0→0,
0^1→1,
1^0→1,
1^1→0
此外,一個數與0異或仍保持不變,即a^0=a
一個數與自己異或結果為0,即a^a=0
11.|=
按位或後賦值
變數|=表達式
參與運算的兩個量按照對應位進行或運算,且
0|0→0,
0|1→1,
1|0→1,
1|1→1
這些位運算都是與二進制碼有關的,所以多弄弄也就會了

③ 在單片機C語言中如何對變數的某一位進行操作或賦值。

在C語言中,一般有兩種方法來操作位,一種是使用C語言提供的位運算操作符,一種是使用位域。

1、使用位域

在C語言中定義位域的一般格式如下:

struct位域結構名
{位域列表};

struct:在C語言中定義位域所使用的關鍵字是struct。

位域結構名:是一個C語言中的標識符,有字母、數字、下劃線組成,而且第一個字元必須是字母或者下劃線。

位域列表:組其中位域列表的形式為: 類型說明符 位域名:位域長度

下面的示例代碼,通過位域來計算IEEE754浮點數編碼中單精度數的最大值 、最小值和最小弱規范數。

#include<stdio.h>
typedefstructFP_SINGLE
{
unsigned__int32fraction:23;
unsigned__int32exp:8;
unsigned__int32sign:1;
}fp_single;
intmain()
{
floatx;
fp_single*fp_s=(fp_single*)&x;
fp_s->sign=0;
fp_s->exp=0xfe;
fp_s->fraction=0x7fffff;
printf("float最大數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0x1;
fp_s->fraction=0x0;
printf("float最小數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0;
fp_s->fraction=0x1;
printf("float最小弱規范數:%le ",(double)x);
return0;
}

2、使用位運算符

C語言中的位運算符有一個基本的常識,即只能操作整數,不能操作浮點數,因為浮點數是使用IEEE754編碼的,使用位操作數沒有任何意義。

C語言提供的位運算符列表:
&按位與如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0
|按位或兩個相應的二進制位中只要有一個為1,該位的結果值為1
^按位異或若參加運算的兩個二進制位值相同則為0,否則為1
~取反~是一元運算符,用來對一個二進制數按位取反,即將0變1,將1變0
<<左移用來將一個數的各二進制位全部左移N位,右補0
>>右移將一個數的各二進制位右移N位,移到右端的低位被舍棄,對於無符號數,高位補0

④ C語言中「>>=,<<=,&=,^=,|=」分別表示什麼意思請舉例說明

1、C語言中的 >>= 意思為:右移後賦值

代碼示例為:

x = 8;

x >>=3;

右移後結果為:

(4)c語言的按位賦值擴展閱讀:

1、C語言運算符的優先順序順序

運算符的優先順序從高到低大致是:單目運算符、算術運算符、關系運算符、邏輯運算符、條件運算符、賦值運算符(=)和逗號運算符。

2、比特右移運算符的位移

比特右移(>>)運算符可以是算術(左端補最高有效位)或是邏輯(左端補 0)位移。例如,將 11100011 右移 3 比特,算術右移後成為 11111100,邏輯右移則為 00011100。因算術比特右移較適於處理帶負號整數,所以幾乎所有的編譯器都是算術比特右移。

⑤ 關於C語言位運算,賦值的問題,回答詳細一點。為什麼按位取反後輸出的結果不一樣

  1. 2的二進制是00000010,取反得到11111101,最高位為1,說明這是個負數的補碼。負數的補碼,是由其絕對值的原碼取反加1得到,反過來,將負數的補碼減1取反,就得到其絕對值的原碼。11111101-1=11111100,再取反得到00000011,即十進制的3。也就是說該負數的絕對值為3,那麼這個負數為-3。

  2. 所以第一個值是-3

  3. 整型的每一種都分有無符號(unsigned)和有符號(signed)兩種類型(float和double總是帶符號的),在默認情況下聲明的整型變數都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。

  4. 你聲明變數無符號,將二進制轉換無符號在轉換十進制,導致最高位由原來的符號位變成了有效數字位了,參與轉換

  5. 所以最後結果是253

  6. 你去掉前面的unsigned 兩個值應該是一樣的


⑥ C語言 怎麼用 1條語句 進行位賦值

取 b的第5位: (b & 0x10)
清 a 的第5位: (a & 0xef)
賦值到a的第5位: a = (a & 0xef) | (b & 0x10);

⑦ 在C語言中11種賦值運算符的具體含義,用法

1.六個變數=表達式的賦值:

=是賦值運算符,/=是除後賦值,*=是乘後賦值,

%=是取模後賦值,+=是加後賦值,-= 是減後賦值,

2.<<=是左移後賦值,變數<<=表達式 左移就是將左邊的數的二進制各位全部左移若干位,右邊的數指定移動位數,高位丟棄,低位補0, 移幾位就相當於乘以2的幾次方。

3.>>=是右移後,變數>>=表達式,右移運算符是用來將一個數的各二進制位右移若干位,移動的位數由右操作數指定(右操作數必須是非負值),移到右端的低位被舍棄,對於無符號數,高位補0。

對於有符號數,某些機器將對左邊空出的部分用符號位填補(即「算術移位」),而另一些機器則對左邊空出的部分用0填補(即「邏輯移位」);

對無符號數,右移時左邊高位移入0;對於有符號的值,如果原來符號位為0(該數為正),則左邊也是移入0。

如果符號位原來為1(即負數),則左邊移入0還是1,要取決於所用的計算機系統,系統移入0或系統移入1。

移入0的稱為「邏輯移位」,即簡單移位;移入1的稱為「算術移位」。

4.&= 按位與後,變數&=表達式,按位與是指:參加運算的兩個數據,按二進制位進行「與」運算。

如果兩個相應的二進制位都為1,則該位的結果值為1;否則為0。

5.^= 按位異或後賦值,變數^=表達式,參與運算的兩個量按照對應的位進行異或運算,且
0^0→0, 0^1→1, 1^0→1, 1^1→0

一個數與0異或仍保持不變,如a^0=a
一個數與自己異或結果為0,如a^a=0

11.|=是按位或後賦值,變數|=表達式,參與運算的兩個量按照對應位進行或運算,且0|0→0, 0|1→1, 1|0→1, 1|1→1。

(7)c語言的按位賦值擴展閱讀:

1.賦值表達式的功能是計算表達式的值再賦予左邊的變數。

賦值運算符具有右結合性,因此a=b=c=5可理解為a=(b=(c=5))。

2.在其它高級語言中賦值構成了一個語句,稱為賦值語句;

而在C語言中,

把「=」定義為運算符,從而組成賦值表達式。

3.凡是表達式可以出現的地方均可出現賦值表達式。

例如:式子x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a,b相加,和賦予x,故x應等於13。

4.在C語言中也可以組成賦值語句。

按照C語言規定,任何錶達式在其未尾加上分號就構成為語句。

⑧ c語言中復合位運算賦值(&=,|=,^=,>>=,<<=)表示什麼意思

&=,按位與後賦值,變數&=表達式;
|=,按位或後賦值,變數|=表達式;
^=,按位異或後賦值,變數^=表達式;
>>=,右移後賦值,變數>>=表達式;
<<=,左移後賦值,變數<<=表達式;
類似的還有,
/=,除後賦值,變數/=表達式;
*=,乘後賦值,變數*=表達式;
%=,取模後賦值,變數%=表達式;
+=,加後賦值變數,+=表達式;
-=,減後賦值變數,-=表達式;
這些是C/C++獨有的復合賦值運算符,結合方向,從右向左。是一種縮寫形式,使得對變數的改變更為簡潔,更有效率。

⑨ C語言中賦值運算符&=的含義

  • a+=b 等同於 a = a+b

  • a-=b 等同於 a = a-b

  • a*=b 等同於 a = a*b

  • a/=b 等同於 a = a/b

  • a%=b 等同於 a = a%b

  • a&=b 等同於 a = a&b &表示按位與

  • a>>=b 等同於 a = a>>b >>表示右移

  • a<<=b 等同於 a = a<<b <<表示左移

  • a|=b 等同於 a = a|b |表示按位或

  • a^=b 等同於 a = a^b ^表示按位異或

  • 基本的賦值運算符是「=」。他的優先順序別低於其他的運算符,所以對該運算符往往最後讀取。

  • 一開始可能會以為它是「等於」,其實不是的。它的作用是將一個表達式的值賦給一個左值。一個表達式或者是一個左值,或者是一個右值。

  • 所謂左值是指一個能用於賦值運算左邊的表達式。左值必須能夠被修改,不能是常量。我們現在是用變數作左值,以後還可以看到,指針和引用也可以作左值。

  • 復合的賦值運算符,又稱為帶有運算的賦值運算符,也叫賦值縮寫。

  • 例如:i=i+j;可表示為 i+=j;這里+=是復合賦值運算符。

  • 同樣的共有10種這樣的運算符,它們是:

  • += 加賦值;

  • -= 減賦值;

  • *= 乘賦值;

  • /= 除賦值;

  • %= 求余賦值;

  • &= 按位與賦值;

  • | = 按位或賦值;

  • ^= 按位異或賦值;

  • <<= 左移位賦值;

  • >>= 右移位賦值。

⑩ 51單片機c語言編程能給位賦值么

keil的話可以。打開你的reg51(或reg52等)頭文件,你就會看到已經聲明的位變數,
格式是:sbit 位變數名=SFR名^位地址值 (P3也是頭文件中最開始部分聲明的)
頭文件中有
sbit WR=P3^6;
所以你直接寫 WR=1就行了