目錄
10、運算子(運算子)
算數運算子
移位運算子
位運算子
賦值運算子
單目運算子
關系運算子
邏輯操作
條件運算子
逗號運算式
下標參考、函式呼叫和結構成員
11、常見關鍵字
11.1、關鍵字typedef
11.2、關鍵字static
10、運算子(運算子)
算數運算子
+ - * / %
#include <stdio.h>
int main()
{
int a = 7 / 2; //'/'為除法號
int b = 7 % 2; //'%'為取余號
float c = 7 / 2.0;
printf("%d\n", a); //列印值為3
printf("%d\n", b); //列印值為1
printf("%f\n", c); //列印值為3.500000
// %f——列印浮點數 %d——列印整數
return 0;
}
移位運算子
//>> —— 右移運算子 << —— 左移運算子
#include<stdio.h>
int main()
{
int a = 12;
//并不是以10進制去移動位置,而是以二進制去移動位置,
int b = a >> 1;
//00000000000000000000000000001100 —— 移動之前 —— 值為12 —— 1*2*2*2+1*2*2+1*2+1
//00000000000000000000000000000110 —— 移動之后 —— 值為6 —— 1*2*2+1*2+1
//int 占空間 4個位元組 —— 每個位元組為占8個bit位 —— int 占 32 個 bit 位
int c = a << 1;
//00000000000000000000000000001100 —— 移動之前 —— 值為12
//00000000000000000000000000011000 —— 移動之后 —— 值為24
printf("%d\n", b); //列印值為6
printf("%d\n", c); //列印值為24
return 0;
}
注:a >> 1 等價與 a / 2 ———— a << 1 等價與 a * 2
a >> 2 等價與 a / 2 / 2 ———— a << 2 等價與 a * 2 * 2 —— 依次類推
位運算子
& ^ |
#include<stdio.h>
int main()
{
int a = 5;
int b = 3;
int c = 5 & 3; //按(二進制)位與
//00000000000000000000000000000101 —— a
//00000000000000000000000000000011 —— b
//00000000000000000000000000000001 —— c
//對應的二進制位只要有0就為0、全部為1才為1
int d = 5 | 3; //按(二進制)位或
//00000000000000000000000000000101 —— a
//00000000000000000000000000000011 —— b
//00000000000000000000000000000111 —— c
//對應的二進制位只要有1就為1、全部為0才為0
int e = 5 ^ 3; //按(二進制)位異或
//00000000000000000000000000000101 —— a
//00000000000000000000000000000011 —— b
//00000000000000000000000000000110 —— c
//對應的二進制位只要有不同就為1,相同為0;
printf("%d\n", c); //列印值為1
printf("%d\n", d); //列印值為7
printf("%d\n", e); //列印值為6
return 0;
}
賦值運算子
= += -= *= /= &= ^= |= >>= <<=
#include<stdio.h>
int main()
{
float a = 1;
float b = 2.5f;
//直接定義的浮點數是double型別如(b = 2.5)需要在后面加上一個f(如上一行所示)
a += b;
//a += b 和 a = a + b 等價
//其他的賦值運算子也一樣,依次類推
printf("%f\n", a);
return 0;
}
單目運算子
! 邏輯反操作
- 負值
+ 正值
& 取地址
sizeof 運算元的型別長度(以位元組為單位)
~ 對一個數的二進制按位取反
-- 前置、后置--
++ 前置、后置++
* 間接訪問運算子(解參考運算子)
(型別) 強制型別轉換
// ! 邏輯反操作
//計算機如何(判斷真偽)
//0為假 非零為真
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
//輸入0,列印hehe
if (num)
printf("hehe\n");
//輸入非零,列印haha
if (!num)
printf("haha\n");
return 0;
//注意計算機中的非零為真 = 1
}
//sizeof 運算元的型別長度(以位元組為單位
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]); //求解陣列中元素的個數
printf("%d\n", sizeof(arr)); //列印值為40
printf("%d\n", sizeof(arr[0])); //列印值為4
printf("%d\n", sz); //列印值為10
return 0;
}
//~ 對一個數的二進制按位取反
//計算機識別二進制語言 —— 記憶體存盤的也是二進制語言,
//對一個數按位取反也是二進制,
//
//整數有三種二進制表達方式;
//原碼 —— 直接按照數字大小正負轉換成二進制
//反碼 —— 原碼的符號位不變,其它位按位取反
//補碼 —— 反碼 + 1;
//
//正整數的原碼,反碼,補碼相同
//負數的原碼,補碼,反碼需要計算
//
//二進制的最高位表示正負
//0表示正數 1表示負數
#include<stdio.h>
int main()
{
int a = 0;
//計算機中儲存的是補碼
//00000000000000000000000000000000 —— a的補碼 —— a是正整數所以原碼,反碼,補碼相同
int b = ~a
//11111111111111111111111111111111 —— b的補碼
//printf列印的是原碼,所以要把b的補碼轉換成原碼
//11111111111111111111111111111110 —— b的反碼
//10000000000000000000000000000001 —— b的原碼
//整數的二進制最高位表示正負號所以b = 1
printf("%d\n", b); //列印值為1
return 0;
}
// -- 前置、后置--
// ++ 前置、后置++
#include<stdio.h>
int main()
{
int num1 = 10;
int num2 = num1++;
int num = 11;
int num3 = --num;
printf("%d\n", num1); //列印值為11
printf("%d\n", num2); //列印值為10
printf("%d\n", num); //列印值為10
printf("%d\n", num3); //列印值為10
return 0;
}
//(型別) 強制型別轉換
#include<stdio.h>
int main()
{
int a = (int) 4.56;
printf("%d\n", a);
return 0;
}
關系運算子
>
>=
<
<=
!= 用于測驗“不相等”
== 用于測驗“相等”
邏輯操作
&& 邏輯與
|| 邏輯或
條件運算子
//exp1? exp2 : exp3
//條件運算子(三目運算子),
//比較a和b的大小,
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = a > b ? a : b;
printf("%d\n", c);
return 0;
}
逗號運算式
//exp1, exp2, exp3, …expN
//逗號運算式的應用
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 3;
int d = (a = a + b, c = b - c, b = a + c);
//逗號運算式從左到右依次執行,整個運算式的結果是最后一個運算式的結果,
printf("%d\n", d); //列印值為2
return 0;
}
下標參考、函式呼叫和結構成員
//下標參考運算子[]
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4 ,5 };
int a = arr[2]; //其中的[]為下表參考運算子
//其中的運算元為 arr和2
printf("%d\n",a); //列印值為3
return 0;
}
//函式呼叫運算子()
#include<stdio.h>
int ADD(int x, int y) //這個()是函式的語法,不是函式呼叫運算子
{
return (x + y);
}
int main()
{
int num1 = 10;
int num2 = 20;
int num3 = ADD(num1, num2);
//上面一行中的()是函式參考運算子,參考函式程序中不可少
//其中的運算元為 ADD、num1、num2
printf("%d\n", num3); //列印值為30
return 0;
}
11、常見關鍵字
auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while
auto —— 自動關鍵字,可以省略,一般用于資料型別前面
回圈陳述句:break continue do for while
選擇陳述句:case continue default else if
資料型別:char double float int long short signed unsigned void
const —— const 修飾的常變數
自定義型別:enum struct union
extern —— 外部宣告
goto陳述句
register —— 暫存器
return —— 函式回傳
size —— 求資料所占空間的大小
static —— 靜態
typedef —— 重新定義型別
11.1、關鍵字typedef
//將unsigned int 重新命名為 uint ,兩者所表達的型別相同,
#include<stdio.h>
typedef unsigned int uint; //unsigned int 重新命名為 uint
int main()
{
uint age = 22;
return 0;
}
11.2、關鍵字static
static修飾區域變數
是區域變數出了自己的作用域,但是沒有被銷毀,
增加了區域變數的生命周期,但是作用域沒有發生改變,
#include<stdio.h>
void test2()
{
int b = 0;
b++;
printf("%d\n", b);
}
void test1()
{
static int a = 0; //static修飾的區域變數
a++;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test1(); // 列印值為 1 2 3 4 5 6 7 8 9 10
i++;
}
i = 0;
while (i < 10)
{
test2(); // 列印值為 1 1 1 1 1 1 1 1 1 1
i++;
}
return 0;
}
static修飾全域變數
全域變數有外部鏈接屬性,作用域是整個工程
當static修飾全域變數時,全域變數沒有了外部鏈接屬性,只能在一個檔案中使用,在其他檔案中不能被參考,
static修飾函式
函式本身就具有外部鏈接屬性
當static修飾函式時,函式沒有了外部鏈接屬性,只能在一個檔案中使用,在其他檔案中不能參考,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290132.html
標籤:其他
上一篇:C語言之函式詳解
下一篇:LIRD(Deep Reinforcement Learning for List-wise Recommendations)論文演算法解讀
