當前位置:首頁 » 編程語言 » c語言位運算置位是什麼意思
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言位運算置位是什麼意思

發布時間: 2022-05-23 05:45:46

c語言什麼是位運算

C語言是為描述系統而設計的,它的第一個應用就是UNIX操作系統的設計,因此必須具有低級語言的特點。指針運算和位運算就是其代表。計算機中的信息以及控制信號均是以二進制碼的0、1的形式存儲和處理的。每一個0或1稱為一個「位」(bit),8位構成一個位元組(byte)。在內存中,每一個位元組均有一個編號,稱為內存地址。 在以前的各章節中,都是將一個位元組(如字元型)和若干位元組(如整型、實型等)中的內容作為一個整體進行處理的(賦值、運算、I/O操作)。 位運算則是針對這些位元組中的若干位進行操作。這在系統軟體設計中和自動控制中是十分有用的。

② C語言中「按位運算符」是什麼意思

1、按位運算符就是直接對整數在內存中的二進制位進行操作運算。比如,&&運算本來是一個邏輯運算符,但整數與整數之間可以用&進行運算。舉個例子,6的二進制是110,11的二進制是1011,那麼6 & 11的結果就是2,它是二進制對應位進行邏輯運算的結果(0表示False,1表示True,空位都當0處理)。

2、C語言提供了六種按位運算符:
& 按位與
| 按位或
^ 按位異或
~ 取反
<< 左移
>> 右移

③ 用位運算對變數指定位置位(求C語言代碼)

置位的意思是置 1,我以變數位元組數最大為 4 位元組為例,你可以定義一個掩碼(你可以擴展這個掩碼至 64 位),再定義一個函數,實現指定的數與對應的掩碼進行位或運算即可。如:

#include<assert.h>
#include<stdio.h>

unsignedintdwMasks[]={
0x00000001,0x00000002,0x00000004,0x00000008,
0x00000010,0x00000020,0x00000040,0x00000080,
0x00000100,0x00000200,0x00000400,0x00000800,
0x00001000,0x00002000,0x00004000,0x00008000,
0x00010000,0x00020000,0x00040000,0x00080000,
0x00100000,0x00200000,0x00400000,0x00800000,
0x01000000,0x02000000,0x04000000,0x08000000,
0x10000000,0x20000000,0x40000000,0x80000000,
};

unsignedintset_bit(unsignedintvalue,intnIndex)
{
assert(nIndex>=0&&nIndex<32);
returnvalue|dwMasks[nIndex];
}

intmain()
{
printf("set_bit(100,0)=%u ",set_bit(100,0));
printf("set_bit(100,1)=%u ",set_bit(100,1));
printf("set_bit(100,2)=%u ",set_bit(100,2));
printf("set_bit(100,3)=%u ",set_bit(100,3));
printf("set_bit(100,4)=%u ",set_bit(100,4));
printf("set_bit(100,5)=%u ",set_bit(100,5));

return0;
}

Linux 下編譯及測試結果如下:

[root@iZ25a38chb4Ztest]#g++test.cpp-g3-Wall-otest
[root@iZ25a38chb4Ztest]#./test
set_bit(100,0)=101
set_bit(100,1)=102
set_bit(100,2)=100
set_bit(100,3)=108
set_bit(100,4)=116
set_bit(100,5)=100

100 的二進製表示為:1100100, 第 2 位和第 5 位本來就為 1,所以置 1 後結果仍然為原來的數。

以上這種方法叫查表法,通常應用於實際項目開發中,效率非常之高。

④ c語言位運算是什麼

運算:C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。

在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。

當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則就會顯得十分重要。

運算符號:

比較特別的是,比特右移(>>)運算符可以是算術(左端補最高有效位)或是邏輯(左端補0)位移。

例如,將11100011右移3比特,算術右移後成為11111100,邏輯右移則為00011100。因算術比特右移較適於處理帶負號整數,所以幾乎所有的編譯器都是算術比特右移。

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

⑤ C語言位運算

按位與 | 按位或 ^

按位異或 ~ 取反 <<

左移 >> 右移<<

1. 按位與運算。按位與運算符"&"是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。

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); }。

5. 左移運算。左移運算符「<<」是雙目運算符。其功能把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數, 高位丟棄,低位補0。例如: a<<4 指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。

⑥ 關於C語言中的位運算。

位運算能使c具有匯編的某些能力
比如提高運算速度啊 和硬體更好的偷情啊 節約存儲空間什麼的 等等
比如說吧
像樓上的直接移位就比使用/運算符快些哈

⑦ 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語言中的位運算在編程中有什麼意義啊!

特定情況下 計算方便,速度快
比如網路地址的計算,

IP1: 192.168.0.11
IP2: 192.168.0.51
mask: 255.255.255.0

數據分別用了4個位元組來表示,當你想計運算元網地址的時候就用 「MASK 邏輯或 IP」 運算, 得出 IP1 和 IP2 屬於同一個子網,
當你想算這兩個地址自身的時候,就用 邏輯與 運算,
如果用算數方法 速度慢 邏輯復雜
而且在單片機的情況下,有的復雜算數指令不一定支持的很好,但是位運算,就是基本邏輯運算,是99.9999% 的晶元都支持的

⑨ C語言中的位運算是干什麼的

通常在遇到BYTE運算問題時要用.

例如GIF image 文件中的"屏幕定義塊"中的第5個位元組(BYTE) 是 "packed Fields",
最高位1個Bit是有無全局調色盤標志位.
接下來3個Bit是分辯率
接下來1個Bit是調色盤顏色是否安出現頻繁程度分過類的標志位.
最低的3個Bit是調色盤顏色表數組大小.

unsigned char packed_Fields;
int flag_G; // 標志位的值
int size; // 顏色表數組大小

// 計算有無全局調色盤標志位的值:
flag_G = (int) ((packed_Fields & 0x80) >> 7);
[用按位與,取出最高位,右移七位到個位數的位置.]

// 如果有全局調色盤,則 計算顏色表數組大小,以便下一步動態分配調色盤RRGGBB數組:
if (flag_G == 1){
size = (int) (packed_Fields & 0x07);
// [用按位與,取出最低的三位]
};