C語言02-常量、二進位制、資料型別

岌岌无名發表於2024-03-31

第4章 常量

1. 常量特點
   程式執行時,其值不能改變的量,即為常量。

2. 常量分類
   字面量常量
   識別符號常量

3. 常量定義方式(識別符號常量)
   ① #define 宏定義
   ② const 關鍵字(C99標準增加)
 

4. 兩種定義方式區別
   型別檢查: const 編譯階段會進行型別檢查,#define 方式不會
   執行時機: const 在程式執行的時在記憶體中建立; #define 在預處理階段進行文字替換

第5章 二進位制

1. 進位制

(1)常見進位制

二進位制、十進位制、十六進位制

(2)不同進位制的表示

預設十進位制
0b開頭表示二進位制
0x開頭表示十六進位制

(3) 不同進位制輸出格式佔位符

%d :十進位制整數。
%x :十六進位制整數。
%#x :顯示字首 0x 的十六進位制整數。 ——x的大小寫
%#X :顯示字首 0X 的十六進位制整數。

1711801370486

2. 進位制轉換

注:一般進位制轉換,其他進位制 轉 十進位制 × ,十進位制 轉 其他進位制 ÷

詳細說明:

  • 其他(幾)進位制 轉 十進位制

​ 規則:從最低位開始,將每個位上的數提取出來,乘以 幾 的(位數-1)次方,然後求和。

  • 十進位制 轉 其他(幾)進位制

​ 規則:將該數不斷除以 幾 ,直到商為0為止,然後將每步得到的餘數倒過來,就是對應的 幾 進位制。

八四二一法: 是一種快速轉換數字的方法,主要用於二進位制、八進位制和十六進位制之間的轉換。

(1)二進位制與十進位制之間相互轉化

8421公式:

2^0=1
2^1=2
2^2=4
2^3=8
2^4=16
2^5=32
2^6=64
2^7=128
2^8=256
2^9=512
2^10=1024   ——對應湊整
二進位制轉十進位制:
1011=1*2^3 + 0*2^2 + 1*2^1 + 1*2^0
	=8+0+2+1
	=11
十進位制轉二進位制:(用2的幾次方的得數湊整)
57=2^5 + 2^4 + 2^3 + 2^0
  =32+16+8+1
  =100000+10000+1000+1
  =111001

(2)十六進位制和十進位制(瞭解)

(3)二進位制與十六進位制之間的相互轉化(重點)

4個二進位制位相當於1個十六進位制位,對應位數相互轉換就可以 中間會使用十進位制作為橋樑

1111——>15——>F

3. 原碼 反碼 補碼

正數和0:
原碼、反碼、補碼都一樣

負數:
原碼:符號位為1,其它轉為對應的二進位制數字即可
反碼:原碼基礎上,符號位不變,其他位取反
補碼:反碼基礎上,+1

注:計算機上儲存的是補碼

補碼計算器:https://www.lddgo.net/convert/number-binary-code

第 6 章 資料型別

bit——位元(b)

byte——>位元組(B)

1. 整數型別

(1)整型劃分

型別名稱 儲存長度
short int 短整型 2位元組
int 整型 4位元組
long int 長整型 4或8位元組
long long int 長長整型 8位元組

注:① 每種型別又分為有符號(signed)和無符號(unsigned)

​ ② 預設表示有符號,如 int 表示 signed int

​ ③int、signed 都可省略

​ int = signed int =signed;short = signed short int

(2)字面量字尾(不需要記)

資料型別 字面量字尾 資料型別 字面量字尾
int 沒有 unsigned int U
long L unsigned long UL
long long LL unsigned long long ULL

注:① 字面量字尾不區分大小寫

​ ② U和L可以自由組合,UL等同於LU,ULL等同於LLU

​ ③short 與 int 字面量字尾使用相同

(3)格式佔位符

資料型別 格式佔位符 資料型別 格式佔位符
int %d unsigned int %u
short %hd unsigned short %hu
long %ld unsigned long %lu
long long %lld unsigned long long %llu

注:資料型別與格式佔位符要一一對應

1711804755080

(4)等寬整數型別 ——只是自行定義的,為了增加程式碼的適配性,提高程式的可移植性

位於標準庫標頭檔案 stdint.h

int8_t		uint8_t
int16_t		uint16_t
int32_t		uint32_t
int64_t		uint64_t


    int8_t n1 = 100;	// 8個二進位制位 1 位元組的有符號整數
    uint8_t n2 = 101;	// 8個二進位制位 1 位元組的無符號整數
    
    int32_t n3 = 10;	// 32個二進位制位 4 位元組的有符號整數
    uint32_t n4 = 11;	 // 32個二進位制位 4 位元組的無符號整數

2. 浮點型別 ——常用的是double

(1)浮點型別劃分

資料型別名 儲存長度 有效小數位數
float 單精度 4 6~9
double 雙精度 8 15~18
long double 長雙精度 10~16 18或更多

都有符號

預設是double

有效小數位顯示的情況:

float、double、Long double的輸出顯示的有效小數位:預設輸出6位

注:printf("float: n3=%.2lf \n",n3); //在%後加入 .2 就表示輸出預設顯示幾位小數,預設顯示6位小數,不過在計算機上儲存的是對應的儲存長度 及 有效小數位,只是輸出顯示的設定罷了

1711864595708

(2)浮點型別字面量字尾(不需要記)

注:字面量字尾加不加都可以

型別 字面量字尾
float F
double 沒有
long double L

注:字面量字尾不區分大小寫!

小數0.55前的0可以省略,等同於 0.55

(3)格式佔位符

資料型別 十進位制形式格式佔位符 科學計數法格式佔位符
float %f %e
double %lf %le
long double %Lf %Le
分別對應兩種形式的佔位符使用:
                      %.3 小數保留3位                      %e 保留一個整數位

注:printf() 輸出的時候,%f 可以表示 float 和 double

​ scanf() 獲取輸入的時候,只有 %lf 表示double

​ 科學計數法說明:double n2 = 5.2e2; //5.2*10^2

1711851594711

1711851728018

(4) 浮點型別儲存原理

浮點數會分成 符號位、指數位、尾數位進行儲存

3. 字元型別

1. 字面量表示
   單引號

2. 跳脫字元
   \n  	——換行符
   \'	——表示'
   \\	——表示\
   \t	——表示製表符

3. 字元型別的本質
   本質是一個位元組的整數,分為 char 和 unsigned char
   
4.格式佔位符
	使用%c表示char型別。

5. ascII 碼  *(記)
   A 65
   a 97

char字元型別中數字表示的含義,對應於ASCII
1、
    char c9 = 199;  //199相對於char型別是指的ASCII值,199超過了ASCII值的範圍
    char c10 = 65;  //65在ASCII中對應的是A,而1對應的是空白
    
2、1對應的是ASCII值為 空白 ,所以輸出顯示的也是空白

1711853471514

4. 布林型別

1. 第一種方式
   C89標準,使用宏定義(#define	)

2. 第二種方式
   C99標準,新增 _Bool 型別

3. 第三種方式
   C99標準,標準庫標頭檔案 <stdbool.h>
   bool true false

總結:三種方式都可以修改布林型別的變數,不過分為兩種:1、第一種為一種,可以直接修改布林型別變數的值

2、第二、三為一種,修改時:0為0,其他非零都為1

第一種 使用宏定義
#include <stdio.h>

#define BOOL int
#define TRUE 1
#define FALSE 0

int main()
{
    //定義布林型別的變數
    BOOL is_ok =TRUE;
    BOOL is_pass = FALSE;

    //is_pass可以被修改
    is_pass =-6;
    printf("is_ok=%d, is_pass=%d \n",is_ok,is_pass);
    

    //條件判斷
    if(is_ok)
    {
        printf("OK! \n");
    }
    else
    {
        printf("不OK!\n");
    }

    if(is_pass)
    {
        printf("PASS!\n");
    }
    else
    {
        printf("不PASS!\n");
    }
}
第二種 新增 _Bool 型別
#include <stdio.h>

int main()
{
    //定義布林型別的變數
    _Bool is_ok = 1;
    _Bool is_pass = 0;
第三種 標準庫標頭檔案 <stdbool.h>
#include <stdio.h>
#include <stdbool.h>

int main()
{
    // 定義布林型別的變數
    bool is_ok = true;
    bool is_pass = false;

附錄

修改配置,提高警告等級

開啟 .vscode 資料夾下的 tasks.json 檔案,新增如下選項:

"-Wall"

最終效果如下:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 生成活動檔案",
            "command": "D:\\Program Files\\mingw64\\bin\\gcc.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-Wall",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "偵錯程式生成的任務。"
        }
    ],
    "version": "2.0.0"
}

下圖示,橙色框中的兩個要挨在一起

1711800783297

相關文章