一、引言
本系列文章主要內容主要是我對C語言的初步認識以及知識小結,
本文主要大概講一講運算子的基本知識點,
二、GET到的知識
- (1)算數運算子:
- (2)移位運算子(作用于二進制位):
- (3)位運算子:
- (4)賦值運算子:
- <1>反邏輯運算子(!)
- <2>sizeof
- <3>~
- <4>++、--(前置,后置)
- <5>強制型別轉換
- (5)關系運算子:
- (6)邏輯運算子:
- (7)條件運算子:
- (8)逗號運算式:
- (9)下表參考、函式呼叫和結構成員
運算子
(1)算數運算子:
| 運算子 | 功能 |
|---|---|
| + | 加法 |
| - | 減法 |
| * | 乘法 |
| / | 除法 |
| % | 取余數 |
注意:若要除法后產生小數,則除號兩邊至少有一個浮點數,
(2)移位運算子(作用于二進制位):
| 運算子 | 功能 |
|---|---|
| << | 左移 |
| >> | 右移 |
下面介紹一下左移的操作方法(右移暫時不討論,和左移有區別):
#include<stdio.h>
int main()
{
int a = 7;
//7的二進制形式是0111,由于a的資料型別是int,占用記憶體為32bit,如下
// |00000000000000000000000000000111|,那么將儲存空間想象成一個格子,左移1以后,最左邊的0被擠出去了,最右邊會空出來一個位置,
// 0|0000000000000000000000000000111_|,將空出來的位置用0補上,那么新的二進制數為1110,即14,
int b = a << 1;
printf("%d", b);
return 0;
}
輸出結果:
(3)位運算子:
| 運算子 | 功能 |
|---|---|
| & | 按二進制位與 |
| ^ | 按二進制位異或 |
| | | 按二進制位或 |
用法:
#include<stdio.h>
int main()
{
int c = 3;//二進制形式為0101
int d = 5;//二進制形式為0111
int e = c & d;
int f = c ^ d;
int g = c | d;
//按位與(&):將兩個數對應的二進制位進行對比,只要有0就記0,否則記1,
//c:00000000000000000000000000000011
//d:00000000000000000000000000000101
//e:00000000000000000000000000000001 即e = 1
printf("%d\n",e);
//按位異或(^):將兩個數的二進制位進行對比,相同記0,相異記1,
//c:00000000000000000000000000000011
//d:00000000000000000000000000000101
//f:00000000000000000000000000000110 即f = 6
printf("%d\n", f);
//按位或(|):講兩個數的二進制位進行對比,只要有1就記1,否則記0,
//c:00000000000000000000000000000011
//d:00000000000000000000000000000101
//g:00000000000000000000000000000111 即g = 7
printf("%d\n", g);
return 0;
}
輸出結果:

(4)賦值運算子:
| 運算子 | 功能或解釋 |
|---|---|
| ! | 反邏輯運算子 |
| - | 負值 |
| + | 正值 |
| & | 取地址 |
| sizeof | 運算元的型別長度(以位元組為單位) |
| ~ | 對一個數的二進制按位取反 |
| - - | 前置、后置-- |
| ++ | 前置、后置++ |
| * | 間接訪問運算子(解參考運算子) |
| (型別) | 強制型別轉換 |
<1>反邏輯運算子(!)
在C語言中0表示假,非0表示真,!可以將假變真,真變假,
若a = 2 ,則!a = 0;若a = 0 ,則a為真,此處規定,當假變真是,其值為1
舉例
#include<stdio.h>
int main()
{
int a = 2,b = 0;
scanf("%d", &b);
if (!a == b)
{
printf("b為0");
}
else
{
printf("b為非0");
}
return 0;
}
<2>sizeof
用來計算資料型別占用的空間(單位:位元組)
#include<stdio.h>
int main()
{
int a = 3;
printf("%d",sizeof a);//這里也可以寫成 sizeof int
return 0;
}
<3>~
首先介紹一下整數在記憶體中儲存方式:整數在記憶體中儲存時,儲存的是二進制數,一個整數的二進制表示有3中形式(原碼,補碼,反碼)
正整數:原碼,補碼,反碼相同
負整數:原碼,補碼,反碼需要計算
有符號的整數最高位是0,表示正數;最高位是1,表示負數,
記憶體中存盤正數時,存盤的是二進制補碼,計算時也采用補碼,
下面為操作方法:
#include<stdio.h>
int main()
{
int a = -1;
//原碼:10000000000000000000000000000001
//反碼:11111111111111111111111111111110(符號位不變,其它位按位取反)
//補碼:11111111111111111111111111111111(反碼的二進制序列+1)
int b = 0;
//二進制序列:00000000000000000000000000000000
//按位取反后得到:11111111111111111111111111111111(補碼) 該補碼就是-1的補碼,因此輸出結果c=-1
int c = ~b;
printf("%d", c);
return 0;
}
輸出如下:

<4>++、–(前置,后置)
以++為例(–同理)
若++在前則先++再使用,若++在后則先使用后++
具體如下:
#include<stdio.h>
int main()
{
int a = 2;
int b = 2;
int c = ++a;
int d = a++;
printf("c = %d\n", c);
printf("a = %d\n", c);
printf("b = %d\n", b);
printf("d = %d\n", d);
return 0;
}
輸出如下:

很明顯計算c時,a先自身加一再賦值給c;計算d時,b先賦值給d再自身加一,
<5>強制型別轉換
示例
#include<stdio.h>
int main()
{
int a = 3.14;//將3.14強制轉化為整型,直接舍去小數點后的數
printf("%d",a);
return 0;
}
輸出如下

(5)關系運算子:
| 運算子 | 解釋 |
|---|---|
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| != | 不等于 |
| == | 等于 |
(6)邏輯運算子:
<1>邏輯與(&&)
二者都為真則為真,否則為假
<2>邏輯或(||)
二者有一個為真即為真,否則為假
示例:
#include<stdio.h>
int main()
{
int a = 0,b = 0;
scanf("%d%d",&a,&b);
if(a==0&&b==0)
{
printf("a和b同時為零");
}
else if(a==0||b==0)
{
printf("a或b其中有一個值為0");
}
return 0;
}
輸出如下


(7)條件運算子:
形式 exp1?exp2:exp3
解釋:exp1為真嗎?如果是真的那就exp2,如果是假那就exp3,
示例:
#include<stdio.h>
int main()
{
int a = 10,b = 0;
b = ((a==5) ? 1 : -1 );
printf("%d",b);
return 0;
}
輸出如下

(8)逗號運算式:
形式:exp1,exp2,exp3…expN
解釋:逗號運算式使用時,從左向右依次計算,整個運算式的值取最后expN的值,
示例:
#include<stdio.h>
int main()
{
int a = 1, b = 2, c = -3;
int d = (a = b-2,b = a + c,c = a + b,c-=3);
printf("%d",d);
return 0;
}
輸出如下

(9)下表參考、函式呼叫和結構成員
| 運算子 | 解釋 |
|---|---|
| [ ] | 下表參考運算子 |
| () | 函式呼叫運算子 |
另外還有 . 和 -> 兩個運算子,暫時不討論,
三、尾聲
這兩天的學習生活非常充實,學到了很多干貨,當然本篇文章只是我對自身目前學到的知識的簡單總結,很多地方都是簡單一提,或多或少地可能有些錯誤,如果發現毛病的話歡迎評論區留言,如果你是和我一樣的萌新,希望這篇文章對你有用,如果你、您是大佬,還請多多指教,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/286642.html
標籤:其他
上一篇:2hutool實戰:IoUtil 流操作工具類(獲取getReader and getWriter)
下一篇:C語言中運算子介紹
