03-變數\常量\進位

来源:https://www.cnblogs.com/Icer-newer/archive/2023/03/11/17205713.html
-Advertisement-
Play Games

變數和數據類型 所有定義的變數都存在記憶體中,定義變數需要記憶體空間,不同類型的變數需要的記憶體空間是不同的 數據類型作用:告訴編譯器,我這個數據在記憶體中需要多大的空間,編譯器預算對象(變數)分配的記憶體空間大小。 1.常量與變數 1.1 常量 常量:程式運行中不能改變的量 整型常量:1 200 字元常量: ...


變數和數據類型

所有定義的變數都存在記憶體中,定義變數需要記憶體空間,不同類型的變數需要的記憶體空間是不同的
數據類型作用:告訴編譯器,我這個數據在記憶體中需要多大的空間,編譯器預算對象(變數)分配的記憶體空間大小。

1.常量與變數

1.1 常量

常量:程式運行中不能改變的量

  • 整型常量:1 200
  • 字元常量: 'c'
  • 字元串常量:"hello"
  • 實型常量(浮點型常量):3.14,0.125
整型常量 100,200,-100,0
實型常量 3.14 , 0.125,-3.123
字元型常量 ‘a’,‘b’,‘1’,‘\n’
字元串常量 “a”,“ab”,“12356”

1.2 變數

1. 變數的空間大小
變數:程式運行中可以被改變的量,存在於記憶體中

  • 變數需要定義,變數的定義:在記憶體中開闢空間,告訴編譯器我有這個變數(聲明),變數定義的本質:在記憶體中開闢空間,給這個空間取名**
  • 數據類型 變數名(數據類型告訴編譯器占多大的空間)
  • int類型在記憶體中占4位元組
  • short類型在記憶體中占2位元組
  • long類型,在windows中都是4位元組,linux中,32位系統4位元組,64位系統8位元組
  • char類型在記憶體中占1個位元組
  • float類型在記憶體中占4位元組,用於存儲小數(float精度能達到7位小數)
  • double類型在記憶體中占8位元組(double精度能達到15位小數)
    char short int long都可以用來存儲整數
int a; // 在記憶體中定義了一個變數a,占int類型大小4個位元組
char b; // 在記憶體中定義了一個變數b,占一個位元組

2. 變數的命名規則

  • 定義變數時,變數名必須以字元和下劃線開頭,不能以數字開頭
  • 變數取名不能為關鍵字
  • 變數取名的時候要顧名思義
  • 變數定義時要區分大小寫
    變數定義的本質:在記憶體中開闢空間,給這個空間取名
  • extern 數據類型 變數名--告訴編譯器有這個變數,但是這裡不開闢空間
        int num;
	num = 100;
	//int num = 200; 定義變數並且初始化 
	printf("num = %d\n", num);
	return 0;//成功完成
        extern short SUM;  // extern 告訴編譯器我有這個變數,沒有定義,不能進行賦值
                           // 聲明有SUM,並沒有開闢空間,只有在定義的時候開闢空間
                           // 定義可以在其他.c文件中定義變數或者main函數外的位置等
#define MAX 10  // MAX相當於一個常量

MAX = 100; // 報錯,MAX是一個常量,常量不可以被更改

3. 變數的特點

  • 變數在編譯時為其分配相應的記憶體空間
  • 可以通過其名字和地址訪問相應的記憶體

4. 聲明和定義的區別

  • 聲明變數不需要建立存儲空間,如:extern int a;
  • 定義變數需要建立存儲空間,如:int b;
#include <stdio.h>

int main()
{
	//extern 關鍵字只做聲明,不能做任何定義,後面還會學習,這裡先瞭解
	//聲明一個變數a,a在這裡沒有建立存儲空間
	extern int a;
	a = 10;	//err, 沒有空間,就不可以賦值

	int b = 10;	//定義一個變數b,b的類型為int,b賦值為10

	return 0;
}

從廣義的角度來講聲明中包含著定義,即定義是聲明的一個特例,所以並非所有的聲明都是定義:

  • int b 它既是聲明,同時又是定義
  • 對於 extern b來講它只是聲明不是定義

一般的情況下,把建立存儲空間的聲明稱之為“定義”,而把不需要建立存儲空間的聲明稱之為“聲明”。

#include <stdio.h>
#define MAX 10 //聲明瞭一個常量,名字叫MAX,值是10,常量的值一旦初始化不可改

int main()
{
	int a;	//定義了一個變數,其類型為int,名字叫a

	const int b = 10; //定義一個const常量,名為叫b,值為10
	//b = 11; //err,常量的值不能改變

	//MAX = 100;	//err,常量的值不能改變

	a = MAX;//將abc的值設置為MAX的值
	a = 123;

	printf("%d\n", a); //列印變數a的值

	return 0;
}

1.3 關鍵字

1.4 const修飾的變數

const關鍵字修飾的變數不能被更改

#include <stdio.h>

int main()
{
	int a;	//定義了一個變數,其類型為int,名字叫a

	const int b = 10; //定義一個const常量,名為叫b,值為10
	//b = 11; //err,常量的值不能改變
	return 0;
}

const修飾的變數b,告訴編譯器,不能通過b(變數名)修改這塊空間的內容,但是可以通過地址進行修改

2.進位

進位也就是進位制,是人們規定的一種進位方法。 對於任何一種進位—X進位,就表示某一位置上的數運算時是逢X進一位。 十進位是逢十進一,十六進位是逢十六進一,二進位就是逢二進一,以此類推,x進位就是逢x進位。

2.1 二進位

二進位是計算技術中廣泛採用的一種數制。二進位數據是用0和1兩個數位來表示的數。它的基數為2,進位規則是“逢二進一”,借位規則是“借一當二”。

當前的電腦系統使用的基本上是二進位系統,數據在電腦中主要是以補碼的形式存儲的。

  • C語言中是沒有辦法書寫二進位的
    1 術語
術語 含義
bit(比特) 一個二進位代表一位,一個位只能表示0或1兩種狀態。數據傳輸是習慣以“位”(bit)為單位。
Byte(位元組) 一個位元組為8個二進位,稱為8位,電腦中存儲的最小單位是位元組。數據存儲是習慣以“位元組”(Byte)為單位。
WORD(雙位元組) 2個位元組,16位
DWORD 兩個WORD,4個位元組,32位
1b 1bit,1位
1B 1Byte,1位元組,8位
1k,1K 1024
1M(1兆) 1024k, 1024*1024
1G 1024M
1T 1024G
1Kb(千位) 1024bit,1024位
1KB(千位元組) 1024Byte,1024位元組
1Mb(兆位) 1024Kb = 1024 * 1024bit
1MB(兆位元組) 1024KB = 1024 * 1024Byte

2. 十進位轉換二進位
十進位轉化二進位的方法:用十進位數除以2,分別取餘數和商數,商數為0的時候,將餘數倒著數就是轉化後的結果。

十進位的小數轉換成二進位:小數部分和2相乘,取整數,不足1取0,每次相乘都是小數部分,順序看取整後的數就是轉化後的結果。

2.2 八進位

八進位,Octal,縮寫OCT或O,一種以8為基數的計數法,採用0,1,2,3,4,5,6,7八個數字,逢八進1。一些編程語言中常常以數字0開始表明該數字是八進位。

八進位的數和二進位數可以按位對應(八進位一位對應二進位三位),因此常應用在電腦語言中。

十進位轉化八進位的方法:
用十進位數除以8,分別取餘數和商數,商數為0的時候,將餘數倒著數就是轉化後的結果。

0123   // 八進位,八進位數之前加0

2.3 十六進位

十六進位(英文名稱:Hexadecimal),同我們日常生活中的表示法不一樣,它由0-9,A-F組成,字母不區分大小寫。與10進位的對應關係是:0-9對應0-9,A-F對應10-15。

十六進位的數和二進位數可以按位對應(十六進位一位對應二進位四位),因此常應用在電腦語言中。


十進位轉化十六進位的方法:
用十進位數除以16,分別取餘數和商數,商數為0的時候,將餘數倒著數就是轉化後的結果。

2.4 C語言各個進位數的表示

十進位 以正常數字1-9開頭,如123
八進位 以數字0開頭,如0123
十六進位 以0x開頭,如0x123
二進位 C語言不能直接書寫二進位數
#include <stdio.h>

int main()
{
	int a = 123;		//十進位方式賦值
	int b = 0123;		//八進位方式賦值, 以數字0開頭
	int c = 0xABC;	//十六進位方式賦值

	//如果在printf中輸出一個十進位數那麼用%d,八進位用%o,十六進位是%x
	printf("十進位:%d\n",a );
	printf("八進位:%o\n", b);	//%o,為字母o,不是數字
	printf("十六進位:%x\n", c);

	return 0;
}

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

-Advertisement-
Play Games
更多相關文章
  • 在Python 中連接MSSQL,MySQL,SQLite,Redis,ElasticSearch,Mongodb,PostgreSQL,Oracle,RabbitMQ 等資料庫/中間件的方式 ...
  • 3、IOC創建對象的方法 使用無參構造創建對象,預設! 使用有參構造創建對象 下標賦值 <!--第一種 下標賦值--> <bean id="user" class="com.jan.pojo.User"> <constructor-arg index="0" value="鐘健"/> </bean> ...
  • 1、Celery的概念 Celery 是一個 基於python開發的分散式非同步消息任務隊列,通過它可以輕鬆的實現任務的非同步處理, 如果你的業務場景中需要用到非同步任務,就可以考慮使用celery, 舉幾個實例場景中可用的例子: 非同步任務:將耗時的操作任務提交給Celery去非同步執行,比如發送簡訊/郵件 ...
  • 一、基本語法元素 1.空白和註釋及語句 (1)空白: 換行符、回車符、空格鍵、水平定位鍵(Tab) 編譯器會忽略掉多餘的空白 作用:增加程式的易讀性 (2)註釋:主要作用是將代碼解釋其功能和作用,在編譯時,編譯器會直接將其丟棄,不會進入執行階段 1)// 在一行內的註釋,此種註釋是同一行內的註釋如果 ...
  • #####需求: 定義一個數組其中包含多個數字。用自己的方式最終實現,奇數放在數組的左邊,偶數放在數組的右邊。(可以創建其他數組,不必須在原數組中改變) 分析: 1.初始化一個數組,裡面既可以存儲奇數也可以存儲偶數(下麵稱這個個數組為原數組)。 2.再次定義兩個數組,一個用來存放從原數組中挑出來的奇 ...
  • VL59 根據RTL圖編寫Verilog程式 這題比較簡單,照著寫就好了。 `timescale 1ns/1ns module RTL( input clk, input rst_n, input data_in, output reg data_out ); reg data_in_reg; al ...
  • 原文鏈接:為什麼 Go 語言 struct 要使用 tags 在 Go 語言中,struct 是一種常見的數據類型,它可以用來表示覆雜的數據結構。在 struct 中,我們可以定義多個欄位,每個欄位可以有不同的類型和名稱。 除了這些基本信息之外,Go 還提供了 struct tags,它可以用來指定 ...
  • 1.全局設置用戶名和郵箱 因為平時除了開發公司項目還會寫自己的項目或者去維護開源項目,一般情況下,公司會要求提交代碼時使用自己的真名或者拼音和公司郵箱,以前就只會設置全局用戶名或郵箱如下 git config --global user.name "username" git config --gl ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...