欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

談?wù)凜語(yǔ)言中位運(yùn)算你要知道的那些事兒

 更新時(shí)間:2022年02月18日 09:48:39   作者:Code_流蘇  
C語(yǔ)言中的各種運(yùn)算都是以字節(jié)的形式進(jìn)行,在編寫很多系統(tǒng)程序時(shí),如驅(qū)動(dòng)程序、磁盤文件管理程序等,常要求將數(shù)據(jù)按位(bit)進(jìn)行運(yùn)算或者處理,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中位運(yùn)算的相關(guān)資料,需要的朋友可以參考下

一、概念說(shuō)明

1.概念

先來(lái)看一下位運(yùn)算的概念:

1.1位運(yùn)算

位運(yùn)算簡(jiǎn)單來(lái)說(shuō),就是按二進(jìn)制位進(jìn)行運(yùn)算。

位運(yùn)算: 從現(xiàn)代計(jì)算機(jī)中所有的數(shù)據(jù)二進(jìn)制的形式存儲(chǔ)在設(shè)備中。即 0、1 兩種狀態(tài),計(jì)算機(jī)對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行的運(yùn)算(+、-、*、/)都是叫位運(yùn)算,即將符號(hào)位共同參與運(yùn)算的運(yùn)算。

了解了位運(yùn)算之后,我們來(lái)看一下位運(yùn)算符

1.2位運(yùn)算符

符號(hào)描述運(yùn)算規(guī)則
&按位與兩個(gè)位都為1時(shí),結(jié)果才為1
|按位或兩個(gè)位都為0時(shí),結(jié)果才為0
^按位異或兩個(gè)位相同為0,相異為1
~按位取反0變1,1變0
<<左移各二進(jìn)位全部左移若干位,高位去掉,低位補(bǔ)0
>>右移各二進(jìn)位全部右移若干位,對(duì)無(wú)符號(hào)數(shù),高位補(bǔ)0,有符號(hào)數(shù),編譯器不同,處理方法不同

關(guān)于右移:不同的編譯器處理方法可能會(huì)不一樣,有的會(huì)補(bǔ)符號(hào)位,有的會(huì)補(bǔ)0。

 ★小提示:
 a.邏輯位運(yùn)算都是以 (bit)為單位。
 b.位運(yùn)算符的操作數(shù)必須是整數(shù)/字符類型。

2.舉例及補(bǔ)充

2.1位運(yùn)算

以+為例

舉一個(gè)簡(jiǎn)單的例子來(lái)看下( + - * \)位運(yùn)算:

int a = 3;
int b = 4;
int c = a + b;

計(jì)算兩個(gè)數(shù)的和,因?yàn)樵谟?jì)算機(jī)中都是以二進(jìn)制來(lái)進(jìn)行運(yùn)算,所以上面我們所給的 int 變量會(huì)在機(jī)器內(nèi)部先轉(zhuǎn)換為二進(jìn)制在進(jìn)行相加:

3(a): 0 0 0 0 0 0 1 1

加上(+)

4(b): 0 0 0 0 0 1 0 0

等于(=)

7(c ): 0 0 0 0 0 1 1 1

通過(guò)觀察我們可以發(fā)現(xiàn),相比在代碼中直接使用(+、-、*、/)運(yùn)算符,如果有位運(yùn)算符的話,代碼運(yùn)行效率會(huì)不會(huì)更高,隨著位運(yùn)算符后續(xù)的出現(xiàn),發(fā)現(xiàn)其實(shí)確實(shí)是這樣。

下面一起來(lái)看一下位運(yùn)算符:

2.2位運(yùn)算符

關(guān)于每個(gè)運(yùn)算符舉一個(gè)簡(jiǎn)單的例子,來(lái)加深理解。

2.2.1按位與“&”

運(yùn)算規(guī)則:
0 & 0 = 0  
0 & 1  =0  
1 & 0 = 0  
1 & 1 = 1
簡(jiǎn)要口訣:(同1為1,其余為0)

例如:

3 & 5
0000 0011(十進(jìn)制:3)
&
0000 0101(十進(jìn)制:5)
=
0000 0001 (十進(jìn)制:1)

因此結(jié)果等于1(十進(jìn)制)

2.2.2按位或“|”

運(yùn)算規(guī)則:0 | 0 = 0   
0 | 1 = 1  
1 | 0 = 1  
1 | 1 = 1
簡(jiǎn)要口訣:同0為0,其余為1

例如:

3 | 5
0000 0011(十進(jìn)制:3)
|
0000 0101(十進(jìn)制:5)
=
0000 0111(十進(jìn)制:7)

因此結(jié)果等于7(十進(jìn)制)

2.2.3按位異或“^”

運(yùn)算規(guī)則:
0 ^ 0 = 0  
0 ^ 1 = 1  
1 ^ 0 = 1  
1 ^ 1 = 0
簡(jiǎn)要口訣:相同為0,不同為1

例如:

4 ^ 7
0000 0100(十進(jìn)制:4)
^
0000 0111 (十進(jìn)制:7)
=
0000 0011(十進(jìn)制:3)

因此結(jié)果等于3(十進(jìn)制)

2.2.4按位非(取反)“~”

運(yùn)算規(guī)則:
~1 = 0  
~0 = 1
簡(jiǎn)要口訣:1變0,0變1

例如:

~15
~0000 1111(十進(jìn)制:~15)
=1111 0000(十進(jìn)制:240)

因此結(jié)果等于240(十進(jìn)制)

2.2.5左移“<<”

補(bǔ)充:若左移時(shí)舍棄的高位不包含1,則每左移一位,相當(dāng)于該數(shù)乘以2。

例如:

1 << 2
即 1左移兩位
0000 0001(十進(jìn)制:1)
左移兩位(<<2)后:
0000 0100(十進(jìn)制:4)

結(jié)果為:4

2.2.6右移“>>”

補(bǔ)充: 操作數(shù)每右移一位,相當(dāng)于該數(shù)除以2。

例如:

8 >> 2
即 8右移兩位
0000 1000(十進(jìn)制:8)
右移兩位( >>2 )后:
0000 0010(十進(jìn)制:2)

結(jié)果為:2

了解了這些概念之后,我們一起來(lái)看一下問(wèn)題吧!

二、問(wèn)題實(shí)戰(zhàn)

自己編寫了個(gè)題,僅用于學(xué)習(xí),目的是為了加深對(duì)位運(yùn)算的理解。

大家可以嘗試實(shí)現(xiàn)一下

1.問(wèn)題描述(開(kāi)放題)

Problem Description

自己設(shè)計(jì)程序,要求用六種位運(yùn)算符實(shí)現(xiàn)對(duì)兩個(gè)整數(shù)的運(yùn)算。

2.輸入輸出

Input

無(wú)

Output

兩個(gè)整數(shù)經(jīng)六種位運(yùn)算分別得到的結(jié)果

三、源碼實(shí)現(xiàn)(+詳細(xì)注釋)

1.注釋版

//編碼及注釋:Code_流蘇
//定義頭文件
#include<stdio.h>

int main()
{
	//給定兩個(gè)整數(shù)a和b 分別初始賦值為3和5
	//定義d e f g h i分別存儲(chǔ)各種位運(yùn)算后的值
    unsigned char a=3,b=5,c,d,e,f,g,h,i;
    // a(3): 0000 0011
    // b(5): 0000 0101 
    
    //按位與 &
    c=a&b;
    //經(jīng)過(guò)按位與運(yùn)算,得到c的值為0000 0001
    //以十進(jìn)制輸出
    printf("經(jīng)過(guò)按位與運(yùn)算后,可得c的值:%d\n",c);//輸出結(jié)果為1
    
    //按位或 |
    a=3;
    b=5;
    d=a|b;
    //經(jīng)過(guò)按位或運(yùn)算,得到c的值為0000 0111
	//以十進(jìn)制輸出
    printf("經(jīng)過(guò)按位或運(yùn)算后,可得d的值:%d\n",d);//輸出結(jié)果為7
    
    //按位異或 ^
    a=3;
	b=5;
	e=a^b;
	//經(jīng)過(guò)按位異或運(yùn)算,得到c的值為0000 0110
	//以十進(jìn)制輸出
	printf("經(jīng)過(guò)按位異或運(yùn)算后,可得e的值:%d\n",e);//輸出結(jié)果為6
	
	//按位非(取反) ~
	a=3;
	b=7; //0000 0111 此處重新賦值 排除偶然性
	f=~a;
	g=~b;
	//經(jīng)過(guò)按位非(取反)運(yùn)算,得到f的值為1111 1100 g的值為1111 1000
	//以十進(jìn)制輸出
	printf("經(jīng)過(guò)按位非運(yùn)算后,可得f和g的值:%d %d\n",f,g);//輸出結(jié)果f的值為252,g的值為248
	
	//移位 左移:>> 右移:>>
	a=3;
	b=5;
	h=a<<2;
	i=b>>2;
	//經(jīng)過(guò)位移運(yùn)算,得到f的值為0000 1100 g的值為0000 0001
	//以十進(jìn)制輸出
	printf("經(jīng)過(guò)移位運(yùn)算后,可得f和g的值:%d %d\n",h,i);//輸出結(jié)果h的值為12,i的值為1
    return 0;//返回0,代表程序執(zhí)行結(jié)束
}

關(guān)于unsigned char的解釋:

unsigned char是無(wú)符號(hào)字節(jié)型,char類型變量的大小通常為1個(gè)字節(jié)(1字節(jié)=8個(gè)位),且屬于整型。這就是為什么要用unsigned char的原因。

2.純?cè)创a版

#include<stdio.h>
#include<stdlib.h>

int main()
{
    unsigned char a=3,b=5,c,d,e,f,g,h,i;

    c=a&b;
    printf("經(jīng)過(guò)按位與運(yùn)算后,可得c的值:%d\n",c);
    
    a=3;
    b=5;
    d=a|b;
    printf("經(jīng)過(guò)按位或運(yùn)算后,可得d的值:%d\n",d);
    
    a=3;
	b=5;
	e=a^b;
	printf("經(jīng)過(guò)按位異或運(yùn)算后,可得e的值:%d\n",e);
	
	a=3;
	b=7; 
	f=~a;
	g=~b;
	printf("經(jīng)過(guò)按位非運(yùn)算后,可得f和g的值:%d %d\n",f,g);
	
	a=3;
	b=5;
	h=a<<2;
	i=b>>2;
	printf("經(jīng)過(guò)移位運(yùn)算后,可得f和g的值:%d %d\n",h,i);
	
    return 0;
}

四、輸出結(jié)果展示

1.輸出結(jié)果

經(jīng)過(guò)按位與運(yùn)算后,可得c的值:1
經(jīng)過(guò)按位或運(yùn)算后,可得d的值:7
經(jīng)過(guò)按位異或運(yùn)算后,可得e的值:6
經(jīng)過(guò)按位非運(yùn)算后,可得f和g的值:252 248
經(jīng)過(guò)移位運(yùn)算后,可得f和g的值:12 1

--------------------------------
Process exited after 0.3508 seconds with return value 0
請(qǐng)按任意鍵繼續(xù). . .

2.輸出結(jié)果(圖示版)

總結(jié)

到此這篇關(guān)于C語(yǔ)言中位運(yùn)算你要知道的那些事兒的文章就介紹到這了,更多相關(guān)C語(yǔ)言中的位運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論