C++初學者4——標準數據類型

先導:

目錄

一、整形

二、浮點型

!保留指定小數位數?

三、布爾類型

關系運算

邏輯運算

?C++邏輯運算四句口訣?

四、字符型

ASCll碼?

C++中的字符表示

字符比較

ASCII中的常用轉換

大小寫轉換

轉換成0~25

五、數據類型隱式轉換

?1. 隱式轉換的通用規則?

?2. 隱式轉換的優先級?

?示例:算術運算時的隱式轉換?

?3. 整數提升(Integer Promotion)??

?4. 算術轉換(Arithmetic Conversion)??


一、整形

我們平常最常見的整形是int,它占4個字節 ,也就是32比特,可表示的范圍為-2^{31}~2^{31}-1,如果是 unsigned int,即沒有負數區間,表示范圍為0~2^{32}-1

cout << sizeof(int) << endl << sizeof(1234)輸出:
4
4

如果我們存儲的數字范圍超過int了,那么我們就可以使用long long。long long占8個字節

cout << sizeof(123456789123456789) << endl << sizeof(long long);輸出:
8
8

有的時候我們需要把int轉換為long long,我們可以將一個數字乘上1LL或者加上后綴ll或LL

cout << sizeof(1234 * 1LL);
輸出:
8

在實際編程過程中,如果需要多次使用 long long,我們可以通過 typedef 關鍵字將 long long 重命名為 ll?

使用格式:typedef long long ll;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a;
int main(){cin >> a;cout << sizeof(a);return 0;
}
輸出:
8

另外,在C++ primer是這樣規定的:sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long),但是各個數據類型的具體長度,則是由編譯器自行決定的。

在我們考試的系統中,short 占 2 個字節,long 占 8 個字節。

二、浮點型

名稱數據類型字節數數據范圍有效位數
單精度浮點數float4B-3.4e38~3.4e386~7位
雙精度浮點數double8B-1.7e308~1.7e30815~16位
長雙精度浮點數long double16B-1.2e4932~1.2e493218~19位

float 占 4 字節,保留有效位數 7 位,double 占 8 字節,保留有效位數 16 位。一般在算法競賽中,我們都使用 double

其中,浮點型默認為double類,跟long long一樣,也可以通過后綴f、F(單精度浮點型)、L(長雙精度浮點型)。

cout << sizeof(1.11) << endl;
cout << sizeof(1.11f) << endl;
cout << sizeof(1.11F) << endl;
cout << sizeof(1.11L) << endl;輸出:
8
4
4
16

!保留指定小數位數?

?注意:

  1. 使用setprecision保留小數位數時,需要引入頭文件#include <iomanip>
  2. 必須加 fixed,否則實際輸出位數可能會小于指定保留位數。
  3. 以上所有格式化控制符只對緊跟在其后的數據有作用
#include <iostream>
#include <iomanip>
using namespace std;
const double P = 3.1415;
int main(){cout << P << endl;cout << setprecision(5) << P << endl; //錯誤示范,此處必須要加fixedcout << setprecision(6) << 3.14159265358 << endl;cout << fixed << setprecision(3) << P << endl;cout << fixed << setprecision(5) << P << endl;return 0;
}

輸出為:?

? ? 3.1415
? ? 3.1415
? ? 3.14159
? ? 3.142
? ? 3.14150

三、布爾類型

名稱數據類型字節數數值范圍
布爾bool1Btrue或false

布爾變量聲明和賦值

bool a = true, b = false;
bool a, b;
bool a = 0, b = 1;
//注意,同之前的一樣,每個變量只能被定義聲明一次,這里只是為了方便演示

輸出的bool類型,并不會輸出true或者false,而是輸出1或0,其中,true是1,false是0一個非零數定義成bool的時候為true,但輸出是1!!!

cout << bool(0.2) << endl;    //輸出:1
bool a = -1, b = 0;
cout << a << " " << b;    //輸出:1 0
int c = bool(3), d = false;
cout << c << " " << d << endl;    //輸出1 0

關系運算

大小關系C++關系運算符數學符號
大于>>
小于<<
大于等于>=? ? ??\geq
小于等于<=\leq
等于===
不等于!=\neq

重點來了:

數值A? ?關系運算符? ?數值B(表達式的值:布爾值)

什么意思呢?讓我們來看幾個例子

比如表達式

1 > 2

1顯然比2小,所以這個表達式的值為false(否)

(a = 3) == 3

這個式子中,先把a賦值成了3,再判斷a是不是等于3,這個結果肯定是true

有一個比較容易判斷錯的式子:(1 < 2)== false

這個式子的值為false。首先,我們先解析括號中的式子:1<2,這個式子的結果肯定為真,而真與假矛盾了,所以這個式子肯定為假

記住這個四句口訣,輕松搞定多重關系運算符的真假判斷:


?🎯 口訣速記?

  1. ?括號優先算?(先算括號內)
  2. ?比較從左看?(同級從左到右)
  3. ?賦值返右邊?(=返回賦值結果)
  4. ?真值對比干?(true/false直接比)

?🌰 例子秒懂?

  • (a=3)==3 → ??(口訣3:賦值返右邊,a=3返回3,再比3==3
  • (1<2)==false → ??(口訣1+4:先算1<2true,再比true==false

?**? 避坑提醒**?

  • 小心**賦值=比較==**別混淆!
  • 遇到<>等比較符,?從左到右依次算。

用這口訣,再復雜的表達式也能秒拆解! ?

邏輯運算

邏輯運算符含義
&&邏輯與,如果兩個表達式的值都為真,就返回真,否則,就返回假
||邏輯或,兩個表達式有一個表達式的值為真,就返回真
邏輯非,如果表達式為真,就返回假。表達式為假,就返回真

邏輯運算真值表(1表示表達式的值為真,0表示假):

ABA && BA || BA ! B
11110
10010
01011
00001

?

重點又又又來了🙂:

布爾值A? ?邏輯運算符? ?布爾值B(表達式的值:布爾值)

大家一定要牢記于心,我們來看看一些例題:

判斷一個數a是否滿足2\leq a\leq 17,有很多初學者會這樣寫:

2 <= a <= 17

?但這是大錯特錯的,在C++中,程序是順序執行的,它會先執行2<=a,不論結果如何,返回的一定是一個布爾值,可布爾值如何跟17進行比較,所以我們要用上邏輯運算符,這樣寫:

2 <= a && a <= 17

只有兩種條件都滿足了,也就是滿足了2\leq a\leq 17,結果才為真。

判斷一個數是否是3或5的倍數:

a % 3 == 0 || a % 5 == 0

?C++邏輯運算四句口訣?

  1. ??"非先算,與或后"??(!?>?&&?>?||
  2. ??"或一真,與全真"??(||?一真即真,&&?全真才真)
  3. ??"區間判,與相連"??(a>=2 && a<=17
  4. ??"整除判,或相連"??(num%3==0 || num%5==0

?🌰 例子秒懂?

  • !flag && (x>5)?→ 先算!flag,再算&&(口訣1)
  • age>=18 || score>90?→ 滿足一個即真(口訣2)
  • 2<=a && a<=17?→ 區間必須用&&(口訣3)
  • n%3==0 || n%5==0?→ 3或5的倍數(口訣4)

? 核心:優先級+短路求值+區間寫法,四句搞定所有邏輯判斷! ?

在寫邏輯表達式時,一定要注意優先級,如果優先級靠后的那個運算符,一定要加括號!

?對于布爾類型,需要研究的知識有很多,這對于以后的基礎都非常重要,小編之后也會帶著大家一起練習。

四、字符型

字符常量是由單個字符組成,所有字符采用 ASCII 編碼,通用 ASCII 編碼共有?128?個字符。在程序中通常用一對單引號將單個字符括起來表示一個字符常量。如:'a','0','A'。

名稱數據類型字節數數據范圍
字符char1B-128~127
無符號字符unsigned char1B0~255

ASCll碼?

ASCII碼:它是一種基礎的字符編碼標準,用7位二進制數(即0~127的十進制范圍)表示128個字符。

  • ?標準ASCII(0~127)??:
    • ?0~31?:控制字符(如換行\n、制表符\t、回車\r等)。
    • ?32~126?:可打印字符:
      • 32:空格(
      • 48~57:數字 09
      • 65~90:大寫字母 AZ
      • 97~122:小寫字母 az
      • 其他:標點符號(如 !, @, # 等)。
    • ?127?:刪除控制字符(DEL)。
  • ?擴展ASCII(128~255)??:非標準,依賴系統(如Windows-1252),表示特殊符號(如é, ?等)。

C++中的字符表示

char a = 'A';//存儲ASCII值65
cout << a << endl;
char a = 65;//定義a在ASCII中為A
cout << a;輸出:
A
A

我們可以使用轉義字符,來實現一些輸出(不要求掌握后兩個)

名稱字符形式
換行\n0X0A
水平制表\t0X09
反斜杠\\0X5C
#include <bits/stdc++.h>
using namespace std;
int main(){cout << "大家好\n我是\t小貓\\";return 0;
}

大家可以運行看看

字符比較

這部分就要用到之前講過的關系運算了,大家可以復習一下。(注意,這里我們所講的是字符,不是字符串,字符串之間的比較方式為字典序)

字符比較和數字之前的比較一樣,都是返回表達式的值為真還是假,但是字符比較的不是字符,而是ASCII中字母所代表的數字,舉一些例子:

  • 表達式'a'>'b'的值,a在ASCII中為97, b為98,a應該比b小,這個表達式的值為假
  • '0'<'2',這個的值顯然為真,因為48<50

在這里要補充一點,字符和字符之間是可以進行運算的,參與運算的也是每個字母代表的ASCII值,結果也是數字,如'b'+1的結果是99。

ASCII中的常用轉換

大小寫轉換

我們可以根據ASCII中的規律進行大小寫轉換,我們可以發現,大寫字母和小寫字母之間ASCII值只差了32(注意,小寫字母轉化成大寫字母時,需要減去32,反之,則加上32),這樣,就實現了C++中的大小寫轉換。

#include <bits/stdc++.h>
using namespace std;
int main(){char a = 'A';char b = a + 32;cout << a << endl << b;return 0;
}

轉換成0~25

有時,我們為了看起來更方便一些,可以把字母轉換成對應的0~25。怎么操作呢?對于小寫字母,我們只要把對應的字母減去一個'a';對于大寫字母,我們我們只要把對應的字母減去一個'A'

#include <bits/stdc++.h>
using namespace std;
int main(){char a = 'C';cout << a - 'A' << endl;char b = 'c';cout << b - 'a' << endl;
}

注意!!!ASCII只針對于英文,中文無效

五、數據類型隱式轉換

隱式轉換是指在編程語言中,由編譯器自動執行的類型轉換過程,而無需顯式指定。這種轉換是為了保持操作的一致性,使不同類型的數據能夠在一些特定的上下文中進行運算或操作。隱式轉換通常涉及到較小范圍數據類型較大范圍數據類型的轉換,以避免數據丟失或提高精度。


?1. 隱式轉換的通用規則?

隱式轉換通常發生在以下情況:

  1. ?賦值時?(=
  2. ?算術運算時?(+,?-,?*,?/
  3. ?函數調用時?(參數類型不匹配)
  4. ?初始化時?(如?int x = 3.14;

編譯器會按照從低精度到高精度、從小范圍到大范圍的原則自動轉換數據類型,以避免數據丟失。


?2. 隱式轉換的優先級?

C++的隱式轉換遵循類型提升(Type Promotion)?規則,優先級如下(從低到高):

?數據類型??提升方向??示例?
bool→?inttrue?→?1,?false?→?0
char,?short→?int'A'?→?65
int→?unsigned int-1?→?4294967295(32位系統)
int→?longint?→?long(如果?int?范圍不足)
int→?float5?→?5.0f
float→?double3.14f?→?3.14
double→?long double3.14?→?3.14L

?示例:算術運算時的隱式轉換?

int a = 5;
float b = 3.14f;
auto result = a + b;  // int → float(a提升為float)
cout << result;       // 輸出 8.14(float類型)

?3. 整數提升(Integer Promotion)??

在算術運算中,?比?int?小的整型(如?charshort會被提升為?int

char c = 'A';  // ASCII 65
short s = 100;
auto sum = c + s;  // char → int, short → int(運算結果為int)
cout << sum;       // 輸出 165(int類型)

?4. 算術轉換(Arithmetic Conversion)??

如果兩個操作數類型不同,C++會按照以下規則轉換:

  1. ?如果有一個操作數是?long double,另一個轉換為?long double。??
  2. ?否則,如果有一個操作數是?double,另一個轉換為?double。??
  3. ?否則,如果有一個操作數是?float,另一個轉換為?float。??
  4. ?否則,進行整數提升(char/short?→?int),然后按以下規則轉換:??
    • 如果一個是?unsigned long,另一個轉換為?unsigned long
    • 如果一個是?long,另一個是?unsigned int
      • 如果?long?能表示所有?unsigned int?值,則?unsigned int?→?long
      • 否則,兩者都轉換為?unsigned long
    • 如果一個是?long,另一個轉換為?long
    • 否則,如果一個是?unsigned int,另一個轉換為?unsigned int
    • 否則,兩者都轉換為?int

這就是所以內容了,內容較多,大家需要多多理解。下期我們一起練習,掌握它😄

整篇文章碼字不易,大家能不能點個贊💗呢,謝謝

有什么問題可以在評論區討論👬

備注:文章中有部分圖片來自于百度

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916608.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916608.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916608.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HCIP的MGRE綜合實驗1

拓撲圖&#xff1a;二、實驗要求 1、R5為ISP&#xff0c;只能進行IP地址配置&#xff0c;其所有地址均配為公有Ip地址;2、R1和R5間使用PPP的PAP認證&#xff0c;R5為主認證方&#xff1b;R2與R5之間使用PPP的CHAP認證&#xff0c;R5為主認證方;R3與R5之間使用HDLC封裝;3、R2、R…

Go語言實戰案例-鏈表的實現與遍歷

在數據結構的世界中&#xff0c;鏈表&#xff08;Linked List&#xff09; 是一種經典的線性結構&#xff0c;它以靈活的插入與刪除能力著稱。鏈表不像數組那樣需要連續的內存空間&#xff0c;而是通過節點指針連接形成一條“鏈”。本篇我們將使用 Go 語言實現一個單向鏈表&…

C++常見的仿函數,預定義函數,functor,二元操作函數(對vector操作,加減乘除取余位運算等 )

C 標準庫在 <functional> 頭文件中為我們提供了一套非常方便的預定義函數對象&#xff08;也稱為“仿函數”或 “functor”&#xff09;&#xff0c;它們可以像變量一樣直接傳遞給 std::reduce 和其他標準算法。 你提到的 std::bit_or 和 std::multiplies 就是其中的成員…

【RH134 問答題】第 6 章 管理 SELinux 安全性

目錄SELinux 是如何保護資源的&#xff1f;什么是自由決定的訪問控制(DAC)&#xff1f;它有什么特點&#xff1f;什么是強制訪問控制(MAC)&#xff1f;它有什么特點&#xff1f;什么是 SELinux 上下文&#xff1f;setenforce 0 命令的作用是什么&#xff1f;定義一條 SELinux 文…

【MacOS】發展歷程

很高興為您詳細介紹 macOS 的詳細發展歷程。macOS 是蘋果公司開發的操作系統&#xff0c;用于 Mac 電腦、iPad 和 Apple TV 等設備。以下是 macos 的主要版本和發展歷程&#xff1a;1. System 7 (1991)發布日期&#xff1a;1991年特點&#xff1a;引入多任務處理功能。改進了拖…

智慧社區項目開發(二)——基于 JWT 的登錄驗證功能實現詳解

在 Web 應用中&#xff0c;登錄驗證是保障系統安全的核心環節。本文將結合具體接口文檔&#xff0c;詳細講解如何基于 JWT&#xff08;JSON Web Token&#xff09;實現登錄驗證功能&#xff0c;包括 JWT 配置、工具類封裝、登錄流程處理等關鍵步驟&#xff0c;幫助開發者快速理…

Jmeter的元件使用介紹:(七)后置處理器詳解

Jmeter的后置處理器主要用于取樣器執行后的提取數據操作。 Jmeter常用的后置處理器有:Json提取器、正則表達式提取器、邊界提取器、Beanshell后置處理器。此外還有Xpath提取器、CSS選擇器提取器等&#xff0c;由于這兩項多用前端頁面提取元素&#xff0c;目前的項目基本都是采…

Allure的安裝,在Pytest中的簡單使用以及生成測試報告

目錄 1.Allure的安裝 1--下載網址 2--選擇對應系統版本下載 3--配置Allure環境變量 4--驗證安裝是否成功 5--配置JAVAJDK的環境變量&#xff08;如果已經配置&#xff0c;可以忽視這一步&#xff09; 2.python中pytestAllure 1--python安裝Allure包 2--生成測試報告 1--使用pyt…

Oracle 數據庫報 ora-00257 錯誤并且執行alter system switch logfile 命令卡死的解決過程

Oracle 數據庫報 ora-00257 錯誤并且執行alter system switch logfile 命令卡死的解決過程 7月26日下午&#xff0c;某醫院用戶的 HIS 系統無法連接&#xff0c;報如下錯誤&#xff1a;初步判斷是歸檔日志問題。 用戶的 HIS 系統數據庫是雙節點 Oracle 11g Rac 集群。登錄服務器…

ArKTS:List 數組

一種&#xff1a;/**# encoding: utf-8# 版權所有 2025 ©涂聚文有限公司? # 許可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎# 描述&#xff1a; 數組# Author : geovindu,Geovin Du 涂聚文.# IDE : DevEco Studio 5.1.1 …

Spring Boot 3整合Spring AI實戰:9輪面試對話解析AI應用開發

Spring Boot 3整合Spring AI實戰&#xff1a;9輪面試對話解析AI應用開發 第1輪&#xff1a;基礎配置與模型調用 周先生&#xff1a;cc&#xff0c;先聊聊Spring AI的基礎配置吧。如何在Spring Boot 3項目中集成Ollama&#xff1f; cc&#xff1a;我們可以通過OllamaConfig.java…

標準SQL語句示例

一、基礎操作1. 數據庫操作-- 1. 創建數據庫 CREATE DATABASE 數據庫名稱 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 2. 刪除數據庫 DROP DATABASE IF EXISTS 數據庫名稱;-- 3. 選擇數據庫 USE 數據庫名稱;-- 4. 顯示所有數據庫 SHOW DATABASES;-- 5. 查看數據庫創…

STM32-基本定時器

一.基本定時器簡介 STM32F1 系列共有 8 個定時器&#xff0c;分別為&#xff1a;基本定時器、通用定時器、高級定時器。基本定時器 TIM6 和 TIM7 是一個 16 位的只能向上計數的定時器&#xff0c;只能定時&#xff0c;沒有外部IO。 二.基本定時器功能 上圖為基本定時器的功能框…

ofd文件轉pdf

主要后端使用Java實現&#xff0c;前端可隨意搭配http請求添加依賴&#xff1a;<!-- OFD解析與轉換庫 --><dependency><groupId>org.ofdrw</groupId><artifactId>ofdrw-converter</artifactId><version>1.17.9</version></…

4.應用層自定義協議與序列化

1.應用層程序員寫的一個個解決我們實際問題, 滿足我們日常需求的網絡程序, 都是在應用層1.1再談“協議”協議是一種 "約定". socket api 的接口, 在讀寫數據時, 都是按 "字符串" 的方式來發送接收的. 如果我們要傳輸一些 "結構化的數據" 怎么辦呢…

【QT搭建opencv環境】

本文參考以下文章&#xff1a; https://blog.csdn.net/weixin_43763292/article/details/112975207 https://blog.csdn.net/qq_44743171/article/details/124335100 使用軟件 QT 5.14.2下載地址&#xff1a;download.qt.io 選擇版本&#xff1a;Qt 5.14.2 Qt 5.14.2百度網盤鏈接…

golang--函數棧

一、函數棧的組成結構&#xff08;棧幀&#xff09; 每個函數調用對應一個棧幀&#xff0c;包含以下核心部分&#xff1a; 1. 參數區 (Arguments) 位置&#xff1a;棧幀頂部&#xff08;高地址端&#xff09;內容&#xff1a; 函數調用時傳入的參數按從右向左順序壓棧&#xff…

【FAQ】創建Dynamics 365 Sales環境

參考文章&#xff1a;5 分鐘內安裝 Dynamics 365 Sales 步驟 1&#xff1a;訪問 Power Platform 管理中心 導航到make.powerapps.com&#xff0c;然后點擊右上角的齒輪圖標。選擇管理中心&#xff0c;或者訪問aka.ms/ppac訪問 Power Platform 管理中心。 第 2 步&#xff1a…

【數據庫】使用Sql Server將分組后指定字段的行數據轉為一個字段顯示,并且以逗號隔開每個值,收藏不迷路

大家好&#xff0c;我是全棧小5&#xff0c;歡迎來到《小5講堂》。 這是《Sql Server》系列文章&#xff0c;每篇文章將以博主理解的角度展開講解。 溫馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不對之處望指正&#xff01; 目錄前言示例數據集數…

7.項目起步(1)

1&#xff0c;項目起步-初始化項目并使用git管理創建項目并精細化配置src目錄調整git 管理項目2項目起步-配置別名路徑聯想提示什么是別名路徑聯想提示如何進行配置 &#xff08;自動配置了&#xff09;{"compilerOptions" : {"baseUrl" : "./",…