2.1 C#中的基本數據類型
C#中變量的數據類型分為:值類型、引用類型、指針類型。
C#中值類型分為以下:
整型:
byte、int 、short 、long
byte的範圍 0-255 1字節
short的範圍 -32768 ---32767 2字節
int的範圍 -2147483648 -- 2147483647 4字節
long的範圍 -910^18 --- 910^18 8字節
浮點型:
float -3.4x 10^38 ~ + 3.4 x 10^38 4個字節單精度 有精度損耗 0.0F 精確到小數點後大約7位 double (+/-)5.0 x 10-324 ~ (+/-)1.7 x 10308 8個字節雙精度 有精度損耗 0.0D 精確到小數點後大約15~16位
十進制:
decimal(精確) ±1.0 × 10^-28 到 ±7.9 × 10^28 16個字節 無損耗 0.0M 有效位數28位
布爾類型:
bool (true、false)
字符類型:
char 只能包含一個字符 ,‘\0’表示空字符
可空類型(只能是值類型可空 如:int?表示可空int):
Nullable<T> 基礎值類型正常範圍內的值,再加上一個 null 值。
枚舉(值類型):
enum 一組命名整型常量,用 enum 關鍵字聲明的
結構體:
struct 值類型數據結構
// 整型
int a = 1;
long longNum = 12345;
byte b1 = 256; //超範圍,錯誤
// 浮點類型
// 不確定類型的時候可以使用var(自匹配)聲明變量,他可以根據值來推導變量的類型
var money = 2.3; // 當有小數的時候默認是double類型
float f1 = 3.45f;// 如果想要聲明單精度類型,需要在小數後面加f或者F
double d2 = 23.56D;// double 不帶後綴也可帶:D或d
decimal de1 = 2.3m;// decimal 帶後綴 M m
Console.WriteLine(sizeof(decimal)); // 查看decimal類型分配的內存
// 可空類型:注意,C#中的可空類型只能是值類型
// Nullable<T> int? float? double? Nullable<int>
// int c = null;//不可運行 引用類型 null
int? c = null;//可以運行
// bool類型,值為true或者false
bool bl = false;
// char類型
char a = 'a';
2.2 字符串類型
字符串類型: 由一個或多個字符構成的一組字符,string類型是System.String類的別名。它是從object類型派生的。string類型的值可以通過兩種形式進行分配:引號和@引號。
注意:C#中字符串類型是引用類型。
如:string ss=”liming” 或 ss=@“liming”
@將轉義字符(\)當作普通字符對待
@字符串中可以任意換行,換行符及縮進空格都計算在字符串長度之內。
string ss = "\r\nliming";
ss = @"\r\nliming2";
Console.WriteLine(ss);
// ss="" 或string.empty 會分別空間 長度0 null 不會分配空間
string ss2 = "", ss3 = string.Empty, ss4 = null;
Console.ReadLine();
轉義字符:
// 轉義符指的就是一個''+一個特殊的字符,組成了一個具有特殊意義的字符。
\n:表示換行
":表示一個英文半角的雙引號
\t:表示一個tab鍵的空格
\b:表示一個退格鍵,放到字符串的兩邊沒有效果。
\r\n:windows操作系統不認識\n,只認識\r\n
\:表示一個\
2.3 算數運算符
算術運算符:+ - * / %(取餘數 取模)
算術表達式:由算術運算符連接起來的式子,如:1+1 a-b(變量ab前面已聲明並賦初值)
演示: 某學生三門課成績為,語文:90 數學:80 英語:67,編程求總分和平均分.
優先級: 先乘除、後加減、有括號先算括號裏的、相同級別的從左至右運算 int a=((1+5)+3)*2
小括號可以無限制的套用,但一定要成對出現。
注意:這邊的+ - 也可以表示正負運算符
2.4 賦值運算符
++ 自加1 有前加和後加
-- 自減1 有前減和後減
+= -= *= /= %=
對於像++ -- 這樣的只需要一個操作數就能進行運算的運算符,我們叫做一元運算符
對於+-*/%=都需要兩個操作數才能進行運算的這些運算符,我們叫做二元運算符
PS:一元運算符++/--比二元的+-優先級高
2.5 關係運算符
> <
== !=
>= <=
int a = 10;
int b =10;
Console.WriteLine(a!=b);
2.6 邏輯運算符 &&(邏輯與) ||(邏輯或) !(邏輯非)
- 表達式1&&表達式2
| 表達式1 | 表達式2 | 表達式1&&表達式2 |
|---|---|---|
| True | True | True |
| False | True | False |
| True | False | False |
| False | False | false |
- 表達式1||表達式2
| 表達式1 | 表達式2 | 表達式1 ll 表達式2 |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | false |
- !表達式
| 表達式 | !表達式 |
|---|---|
| True | False |
| False | true |
邏輯運算符的短路效果
C#中的邏輯運算符具有短路效果。這意味着當表達式中的一個操作數已經確定了表達式的值時,就不再計算表達式的其他部分。
例如,考慮以下代碼:
int x = 10;
int y = 5;
if (x > 5 && y < 10)
{
Console.WriteLine("哈哈哈哈哈");
}
在這個代碼中,如果x不大於5,則表達式(x > 5 && y < 10)的值將是false,無需計算y < 10。這是因為在邏輯與運算符中,如果左操作數為false,則整個表達式的結果將為false。這個過程被稱為“短路”,因為表達式在遇到第一個false值時就“短路”了。 同樣地,對於邏輯或運算符,如果左操作數為true,則整個表達式的結果將是true,無需計算右操作數。這種情況下也會發生短路。 短路效果可以在編寫C#代碼時提高性能,因為不必計算表達式的所有部分,從而節省了計算資源。
2.7 位運算符
^、& 和 | 運算符是位運算符,用於對二進制數進行按位操作。這些運算符可以對每個二進制位進行邏輯運算,執行異或、按位與和按位或等操作。
- ^ 運算符:異或運算符。當兩個二進制位不同時,結果為 1,否則結果為 0。例如,二進制數 1010 ^ 0110 的結果為 1100。
- & 運算符:按位與運算符。當兩個二進制位都為 1 時,結果為 1,否則結果為 0。例如,二進制數 1010 & 0110 的結果為 0010。
- | 運算符:按位或運算符。當兩個二進制位至少有一個為 1 時,結果為 1,否則結果為 0。例如,二進制數 1010 | 0110 的結果為 1110。
-
~ 運算符是按位取反運算符,用於將一個二進制數的每個位取反,即將 0 變為 1,將 1 變為 0。它的作用相當於將整數的二進制位進行取反操作。
int a = 10; // 二進制數為 0000 1010 int b = ~a; // b 的值為 -11(二進制數為 1111 0101)
這些運算符通常用於處理底層的位操作,例如處理網絡協議、圖形處理、加密和解密等。在 C# 中,可以使用它們來設置、清除或測試二進制位。例如,可以使用 & 運算符來測試一個字節中的某個位是否為 1,使用 | 運算符來將某個位設置為 1,使用 ^ 運算符來切換某個位的值等。
2.8 左移和右移運算符
左移和右移運算符是位運算符,也稱為移位運算符。它們可以對二進制數進行按位移位操作。下面分別介紹一下這兩個運算符的作用:
<<運算符:左移運算符。將一個二進制數向左移動指定的位數,相當於在其末尾添加指定數量的零。例如,二進制數 1010 左移 2 位的結果為 101000。-
>>運算符:右移運算符。將一個二進制數向右移動指定的位數,相當於將其末尾的指定數量的位數刪除。例如,二進制數 1010 右移 2 位的結果為 10。int a = 10; // 二進制數為 1010 int b = a << 2; // b 的值為 40,二進制數為 101000 int c = a >> 1; // c 的值為 5,二進制數為 101