算數運算符
算數運算符功能列表
算數運算符
說明
算術運算符
說明
+
加法運算符
/
除法運算符
-
減法運算符
%
求模運算符
*
乘法運算符
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int result = 1; int i = 0; int count = 0; char Text[128]; char cryptograph[128]; while (1) { if (result == 1) { printf ("請輸入要加密的明文:\n"); scanf_s ("%s",&Text,128); count = strlen(Text); for (i = 0; i < count; i++) { cryptograph[i] = Text[i] + i + 5; } cryptograph[i] = '\0'; printf("加密後的密文是:%s\n", cryptograph); } else if (result == 2) { count = strlen(cryptograph); for (i = 0; i < count; i++) { Text[i] = cryptograph[i] - i - 5; } Text[i] = '\0'; printf ("解密後的明文是:%s\n",Text); } else if (result == 3) { break; } else { printf ("請輸入正確的命令符:\n"); } printf ("輸入1機密新的明文,輸入2對剛加密的密文進行解密,輸入3退出系統:\n"); printf ("請輸入命令符:\n"); scanf_s ("%d",&result); } return 0; }
位運算符
在計算機中,數據都是以二進制形式表示的,以字節為最小單位進行存儲。一個字節分為8位,每一位可以表示一個二進制數0或1。為了能夠對一個字節中的某一位或幾位進行操作,C++提供了6種位運算符。
位運算符表
位運算符
名稱
說明
&
按位與運算
當兩個二進制位進行按位與運算時,如果兩個二進制位都是1,則結果為1;如果至少有一個二進制位是0,則結果為0
|
按位或運算
當兩個二進制位進行或運算時,只要有一個二進制位為1,則結果為1,當兩個二進制位都是0時,結果為0
^
按位異或
按位異或運算時指兩個相應的二進位均相同,則結果為0,否則結果為1
~
按位取反
取反運算符~用於對一個二進制數按位取反,即將0轉換為1,將1轉換為0
<<
左移運算
左移運算是將一個二進制操作數對象按指定的移動的位數向左移,左邊(高位端)溢出的位被丟棄,右邊(低位端)的空位用0補充。相當於乘以2的冪
>>
右移運算
右移運算符與左移運算符相反,是將一個數的二進制位右移若干位,並在左側補0
注意:在進行右移時對於有符號數需要注意符號位問題,當為整數時,最高位補0,而為負數時,最高位是補0還是補1取決於編譯系統的規定。
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int iVar = 18; int jVar = 10; cout << "轉換前iVar = " << iVar << "\n"; cout << "轉換前jVar = " << jVar << "\n"; iVar = iVar ^ jVar; jVar = iVar ^ jVar; iVar = jVar ^ iVar; cout << "轉換後iVar = " << iVar << "\n"; cout << "轉換後jVar = " << jVar << "\n"; int a = 2, b = 4, c = 6, d = 8; unsigned result; result = a&c; printf ("a&c = %u",result); result = b | d; printf("\nb | d = %u", result); result = a^d; printf("\na^d = %u", result); result = ~a; printf("\n~a = %u", result); system("Pause"); return 0; }
三目元運算符
在C++語言中,三目元表達式是由唯一的一個三目元運算符”? :”構成的,該運算符稱為條件運算符,條件運算符要求有3個操作數對象。該運算符的一般形式如下:
表達式1?表達式2:表達式3
條件運算符的執行順序如下:先求出表達式1的值,如果值為真,則對表達式2進行求解,並將表達式2的值作為整個三目元表達式的值;如果表達式1的值為假,則對表達式3進行求解,並將表達式3的值作為整個三目元表達式的值。
注意事項:
在使用三目元運算符時,通常會用括號將條件部分括起來。其實,就算不括起來也是可以的,因為三目元運算符的優先級比較低,在計算時,同樣會先計算條件部分。而同時,三目元運算符的優先級還高於賦值運算符,比關系運算符和算數運算符都低,所以即使不加括號也可以使用。
條件運算符的結合方向為“自右至左”。
在條件表達式中,表達式1的類型可以與表達式2和表達式3的類型不同。
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char name[6]; int sex; printf ("請輸入姓名:\n"); scanf_s ("%s",name,6); printf ("請輸入1或0,1表示男,0表示女:\n"); scanf_s ("%d",&sex); printf ("姓名:%s\n",name); char *strSex = (sex == 1) ? "男" : "女"; printf ("性別:%s\n",strSex); system("Pause"); return 0; }
定義帶參數的宏
宏定義的語法如下:
#define 宏名(參數表) 字符串
注意事項:
(1)對帶參數的宏的展開只是將語句中的宏名後面括號內的實參字符串代替#define命令行中的形參。
(2)在宏定義時,在宏名與帶參數的括號之間不可以加空格,否則將空格以後的字符都作為替代字符串的一部分。
(3)在帶參宏定義中,形式參數不分配內存單元,因此不必作類型定義。
(4)宏定義是用宏名替換字符串,但不進行正確性檢查。
(5)宏定義不用在行末加分號。
(6)#define命令出現在程序中函數的外面,宏名的有效范圍為定義命令之後到源文件結束。
(7)可以使用#undef命令終止宏定義的作用域。
(8)在進行宏定義時,可以引用已定義的宏名,可以層層替換。
(9)在程序中用雙引號包起來的字符串內的字符,不進行替換。
#include "stdafx.h" #include <iostream> #define swap(a,b){int c;c=a;a=b;b=c;} using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int i, a[10], b[10]; printf ("請向數組a中輸入10個數:\n"); for (i = 0; i < 10; i++) { scanf_s("%d", &a[i]); } printf ("顯示數組a:\n"); for (i = 0; i < 10; i++) { printf ("%d,",a[i]); } printf("請向數組b中輸入10個數:\n"); for (i = 0; i < 10; i++) { scanf_s("%d", &b[i]); } printf("\n顯示數組b:\n"); for (i = 0; i < 10; i++) { printf("%d,", b[i]); } for (i = 0; i < 10; i++) swap(a[i], b[i]); printf ("\n輸出轉換後的數組a:\n"); for (i = 0; i < 10; i++) { printf ("%d,",a[i]); } printf("\n輸出轉換後的數組b:\n"); for (i = 0; i < 10; i++) { printf("%d,", b[i]); } system("Pause"); return 0; }
Rand()
程序中用到rand()的作用是產生一個隨機數並返回這個數,a=rand()%max;的具體含義就是產生max以內的任意隨機數(不含max本身)。
設定隨機種子
為了每次運行同一程序得到的隨機序列不是相同的,以系統時間來設定種子,即srand((unsigned long)time(0))。其中,需引用#include "time.h"。
#include "stdafx.h" #include <iostream> #include "time.h" #include "conio.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a,b,c,sign,max; char sign1; printf ("請輸入運算符(1或者其他數字,1表示:-,其他數字表示:+):\n"); scanf_s ("%d",&sign); printf ("請輸入加減時的最大范圍(<1000):\n"); scanf_s ("%d",&max); srand((unsigned long)time(0)); a = rand() % max; b = rand() % max; while ((a < b) && (sign == 1)) { a = rand() % max; b = rand() % max; } sign1 = (sign == 1 ? '-' : '+'); printf("\n%d%c%d=",a,sign1,b); scanf_s("%d",&c); if ((sign == 1) && (a - b == c) || (sign != 1) && (a + b == c)) printf("OK!\n"); else printf("答錯了!\n"); _getch(); system("Pause"); return 0; }