運算符、分支語句

来源:https://www.cnblogs.com/GQH1000/p/18436772
-Advertisement-
Play Games

位操作符: 可以直接操作二進位數位的內容;~是一個單目位操作符,它可以根據一個數字計算另外一個數字,這兩個數字所有二進位數位的內容都不同(按位取反),使用的時候這個符號應該寫在數字前面 雙目位操作符:包括按位與(&),按位或(|)以及按位異或(^),他們都可以把兩個數字對應二進位數位的內容做計算。 ...


位操作符:

可以直接操作二進位數位的內容;~是一個單目位操作符,它可以根據一個數字計算另外一個數字,這兩個數字所有二進位數位的內容都不同(按位取反),使用的時候這個符號應該寫在數字前面

雙目位操作符:包括按位與(&),按位或(|)以及按位異或(^),他們都可以把兩個數字對應二進位數位的內容做計算。

按位與(&)

可以把兩個數字對應數位的內容做計算;只要一個數位的內容是0則與計算以後的結果就是0

	3			0000	0011
&	5			0000	0101
				0000	0001

任何數位內容和0做按位與結果一定是0,任何數位內容和1做按位與結果保持不變,按位與可以用來獲得某些數位的內容,按位與還可以把某些數位的內容設置成0.

按位或(|)

可以把兩個數字對應數位的內容做或計算;只要一個數為的內容是1則或計算以後結果就是1

		3		0000	0011
    |   5		0000	0101
            	0000	0111

任何數位內容和0做按位或結果保持不變;任何數位內容和1做按位或結果就是1,按位或可以把某些數位的內容設置成1

按位異或(^)

可以把兩個數字的對應數位內容做異或計算,如果兩個數位內容一樣則異或結果是0,否則結果是1

		3		0000	0011
     ^  5		0000	0101
            	0000	0110

任何數位內容和0做按位異或保持不變;任何數位內容和1做按位異或一定改變,按位異或可以把某些數位的內容變成相反內容

'a'		97		0110	0001
'A'     65		0100	0001
ch &=32;
ch |=32;
ch ^=32;

移位操作符

可以把一個數字里所有二進位數位的內容統一向左或向右移動n個位置

'>>'表示向右移位

'<<'表示向左移位;

他們都是雙目位操作符,操作符左邊是將要進行移位操作的數字,操作符右邊是將要移動的數位,移位操作本質上就是把每個數位的內容放到另外一個數位里,向左移位的時候右邊空出來的數位里必須填充0,無符號類型數字右移的時候左邊空出來的數位里填充0;有符號類型數字右移的時候左邊空出來的數位里填充符號位的內容(1或0)。一般情況下向左移動n個位置相當於乘以2的n次方,向右移動n個位置相當於除以2的n次方。所有位操作符都不會修改存儲區內容。

&也可以作為單目操作符使用,這個時候它可以用來計算一個存儲區的地址;使用的時候應該把這個操作符寫在一個存儲區的前面,可以使用%p占位符把地址數據顯示在終端視窗里。我們的電腦里所有地址數據都是由32個二進位數位構成的。

*也可以作為單目操作符使用,這個時候它可以根據一個地址找到對應的存儲區,這個操作符應該寫在一個地址數據前面。

三目操作符

可以從兩套計算規則里選擇一套進行計算,三目操作符格式如下:

布爾值 ? 公式1:公式2;如果布爾值為真就採用公式1計算,否則就採用公式2計算。不要再?後使用賦值操作符

練習:男人身高減體重小於105算超重,女人身高減體重小於110算超重;gender(0代表女人,1代表男人),height 身高,weight 體重。使用三目表達式。

gender ? height-weight<105:height-weight<110

練習:編寫程式從鍵盤得到一個0到127之間的整數,把這個整數轉換成二進位的結果顯示在屏幕上

隱式類型轉換

如果表達式里包含多個不同類型的數字就必須首先把他們轉換成同一個類型然後在計算,這個轉換過程叫隱式類型轉換,隱式類型轉換完全由電腦完成,隱式類型轉換的時候必須把占地小的類型轉換成占地大的類型,如果不同類型數字大小不一樣就把整數類型轉換成單精度浮點類型,把有符號類型轉換成無符號類型。

強制類型轉換

C語言程式里可以臨時給數字指定類型,這叫做強制類型轉換,強制類型轉換格式如下

(char)300

強制類型轉換有可能導致數據內容丟失,類型轉換不會修改存儲區內容

分支語句

分支語句可以從幾組語句中選擇一組執行而忽略其他組,如果在編寫程式的時候遇到多種可能性,每種可能性需要專門的語句處理就需要使用分支;if關鍵字可以用來編寫分支語句,if分支里需要為每種可能性編寫專門的語句進行處理,if分支里需要為每組語句編寫配對的邏輯表達式,當某個邏輯表達式結果為真的時候就執行它配對的那一組語句。

if(){
    
}
else if(){
   
}
else if(){
    
}
else if(){
    
}

if分支里的任何兩組語句都不可能同時執行(可能同時執行的語句不可以被包含在一個if分支里),編寫if分支的時候最好先把所有可能性的個數確定下來,如果分支里必然有一組語句會執行就可以省略最後一組語句的邏輯表達式和if關鍵字如果if分支里多個邏輯表達式同時為真就執行第一個為真的邏輯表達式所對應的語句而忽略後面的語句,可以利用這一點簡化if分支里的邏輯表達式。if分支里的某一組語句不僅僅和他配對的邏輯表達式有關,只有當前面的所有的邏輯表達式都為假而配對邏輯表達式為真的時候才會執行這組語句。編寫if分支的時候儘量把邏輯表達式簡單的寫在前面。

練習:編寫程式從鍵盤得到三個數字,找到其中最小的數字並把它顯示到屏幕上

switch……case格式也可以用來編寫分支,如果一個分支里每個可能性都可以用一個唯一的整數表示,這種分支才可以用switch……case格式實現,

switch () {
    case 0:
        break;
    case 1:
        break;
    case 2:
        break;
    case 4:
        break;
    default:
}

練習答案:

點擊查看代碼
#if 0
/*
 *
 * 操作符演示
 *
 * */
#include<stdio.h>
int main(){
	char ch=~0x92;
	int num=ch;
	printf("num=0x%x\n",num);
	printf("3&5=%d\n",3&5);
	printf("3|5=%d\n",3|5);
	printf("3^5=%d\n",3^5);
	printf("3<<2=%d\n",3<<2);
	num=0x80000000;
	printf("0x80000000>>2=0x%x\n",0x80000000 >> 2);
	printf("num=0x%x\n",num >> 2);
	return 0;
}


#elif 0
/*
 *
 * 地址相關操作符演示
 *
 *
 * */
#include<stdio.h>
int main(){
	int num=0;
	printf("&num=%p\n",&num);
	*(&num)=10;
	printf("num=%d\n",num);
	return 0;
}


#elif 0
/*
 *
 * 三目表達式演示、
 *
 */
#include<stdio.h>
int main(){
	int num=0;
	printf("請輸入一個數字:\n");
	scanf("%d",&num);
	num=num >= 0 ? num : 0-num;
	printf("絕對值是%d\n",num);
	return 0;
}


#elif 0
/*
 * 顯示從0到127之間的 整數,顯示二進位
 *
 * */
#include<stdio.h>
int main(){
	int num=0;
	unsigned char tmp=0x80;
	printf("請輸入數字0-127:\n");
	scanf("%d",&num);
	printf("%d", (num & tmp) != 0);
	tmp >>= 1;
	printf("%d", (num & tmp) != 0);
	tmp >>= 1;
	printf("%d", (num & tmp) != 0);
	tmp >>= 1;
	printf("%d", (num & tmp) != 0);
	tmp >>= 1;
	printf(" %d", (num & tmp) != 0);
	tmp >>= 1;
	printf("%d", (num & tmp) != 0);
	tmp >>= 1;
	printf("%d", (num & tmp) != 0);
	tmp >>= 1;
	printf("%d", (num & tmp) != 0);
	printf("\n");
	return 0;
}


#elif 0
/*
 *
 * 類型轉換演示
 *
 * */
#include<stdio.h>
int main(){
	printf("num=%d\n",sizeof(1 ? 1: 0.9));
	printf("num1=%d\n",-7+3<0);
	printf("num2=%d\n",-7+3u<0);
	printf("%d  %d\n",300,(char)300);
	return 0;
}

#elif 0
/*
 *
 *if 分支語句演示
 *
 * */
#include<stdio.h>
int main(){
	int num = 0;
	printf("請輸入一個數字:\n");
	scanf("%d",&num);
	if(num > 0){
		printf("非負數\n");
	}
	else if(num<0){
		printf("負數\n");
	}
	else if(!num){
		printf("是0\n");
	}
	return 0;
}

#elif 0
/*
 *
 * if分支演示
 *
 * */
#include<stdio.h>
int main(){
	int num = 0;
	printf("請輸入一個數字:\n");
	scanf("%d",&num);
	if (num < 0) {
		printf("負數\n");
	}
	else if (num >= 0 && (num & 1)) {
		printf("奇數\n");
	}
	else if (num >= 0 && !(num & 1)) {
		printf("偶數\n");
	}

	return 0;
}


#elif 1
/*
 *
 * 尋找最小數字
 *
 * */
#include<stdio.h>
int main(){
	int num1=0,num2=0,num3=0;
	printf("請輸入三個數字:\n");
	scanf("%d%d%d",&num1,&num2,&num3);

	/*if (num2 > num1 && num3 > num1 ) {
		printf("最小數字是:%d\n",num1);
	}
	else if (num1 > num2 && num3 >num2) {
		printf("最小數字是:%d\n",num2);
	}
	else if (num1 > num3 && num2 > num3) {
		printf("最小數字是:%d\n",num3);
	}*/

	if (num1 > num2) {
		if (num2 > num3) {
			printf("最小數字是是%d\n",num3);
		}
		else {
			printf("最小數字是%d\n",num2);
		}
	}
	else{
		if (num1>num3) {
			printf("最小數字是%d\n",num3);
		}
		else {
			printf("最小數字是%d\n",num1);
		}
	}
	return 0;
}
#endif


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • 本文是筆者研究生期間在閱讀《Linux命令行與shell腳本編程大全》之後總結出來的一些重點知識的記錄,在此重新整理輸出。以便在給上個帖子 涉及到的相關知識點進行一下講解,幫助自己複習 shell腳本的首行規範化應該是 #!/bin/bash # function description 其中第一行 ...
  • crontab -e 創建的定時任務使用的是系統時間。 什麼是系統時間? 系統時間是操作系統內部維護的一個時間戳,用於記錄系統啟動以來經過的時間,以及當前的日期和時間。 系統時間通常與硬體時鐘同步,以確保時間的準確性。 crontab 如何使用系統時間? crontab 在執行定時任務時,會根據系統 ...
  • shc介紹 shc是shell編譯器(Shell Compiler)的縮寫, 它可以對shell腳本進行編譯和加密。它能夠將shell腳本編譯為可執行的二進位文件,其中包含了腳本的功能和邏輯,而不暴露源代碼。可以說shc就是一個加密shell腳本的工具。shc的官方網址為:http://www.da ...
  • 在Linux伺服器的管理和維護過程中,掌握一些常用的命令是非常必要的。這些命令不僅可以幫助你更好地瞭解和控制系統,還能提高工作效率,減少錯誤發生的概率。本文將詳細介紹一些在Linux伺服器上常用的命令,覆蓋從基本的文件操作到高級的系統管理,力求內容全面,幫助讀者深入理解每一個命令的用法和原理。 一、 ...
  • 802.11 無線 WiFi 有 數據幀,管理幀、控制幀 三種類型幀。這些幀由 9 個部分組成:Frame Control,Duration ID,Address1,Address2,Address3,Seq-ctl,Address4,Frame Body,FCS。需要註意的是,有些組成部分在有些幀... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...