首页 > 其他分享 >C语言02-常量、二进制、数据类型

C语言02-常量、二进制、数据类型

时间:2024-04-04 10:12:31浏览次数:30  
标签:02 常量 int double 数据类型 long C语言 二进制 十进制

第4章 常量

1. 常量特点

程序运行时,其值不能改变的量,即为常量。
 习惯上常量名使用大写,方便与变量区分。

2. 常量分类

​ **字面量常量 **:直接使用的常量,不需要定义或声明,包括整数常量、浮点数常量、字符常量。

注:有 1,2,3等			——顾名思义,就是数字整数
	1.2,1.3,1.4等	 ——也就是小数
	'a','b','c'等	   ——表示的就是字母;而单独写入字母 不加单引号,是不允许的,由于单独字母就是变量了

标识符常量

3. 常量定义方式(标识符常量)

​ ① #define 宏定义 (C98标准) ——#define 必须写在 main 函数的外面(#define 是预处理指令)
格式:#define 常量名 常量值

​ ② const 关键字(C99标准增加)
格式:const 数据类型 常量名 = 常量值; ——const 只要位置在 常量名 前面就可以,eg:可以和 数据类型交换位置

注:1.const可以写在主函数里外都行
   2.const适用于C99、是在C99之后产生的,#define是C89

4. 两种定义方式区别

​ 类型检查: const 编译阶段会进行类型检查,#define 方式不会
​ 执行时机: const 在程序执行的时在内存中创建; #define 在预处理阶段进行文本替换

注:两种定义常量的方式,定义后的常量都不允许被修改

第5章 二进制

1. 进制

(1)常见进制

二进制、十进制、十六进制

(2)不同进制的表示

默认十进制
0b开头表示二进制
0x开头表示十六进制

(3) 不同进制输出格式占位符

%d :十进制整数。
%x :十六进制整数。
%#x :显示前缀 0x 的十六进制整数。 ——x的小写
%#X :显示前缀 0X 的十六进制整数。 ——X的大写

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

注:数据类型与格式占位符要一一对应

(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位小数,不过在计算机上存储的是对应的存储长度 及 有效小数位,只是输出显示的设置罢了

(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

(4) 浮点类型存储原理

浮点数会分成 符号位、指数位、尾数位进行存储

3. 字符类型

1. 字面量表示
   单引号

2. 转义字符 (也有对应的ASCII码值)
   \n  	——换行符
   \'	——表示'
   \\	——表示\
   \t	——表示制表符

3. 字符类型的本质
   本质是一个字节的整数,分为 char 和 unsigned char
   
   其中signed char取值范围-128 ~ 127,unsigned char取值范围0 ~ 255。默认是否带符号取决于当前运行环境。
   
4.格式占位符
	使用 %c 表示char类型。

5. ascII 码  *(记)
   A 65
   a 97
   
6. 存储过程
存储字符——>在ASCII码表中读取对应的十进制数字——>转换为对应的 二进制数字 存储在计算机中

注:设计之初,ASCII码只为了表示英文字母的对应数字的转换,不适用与全球;现今创建出了UTF-8编码,该编码可以表示几乎所有语言中的字符

ASCII码只有128个(也就是2^7),一个字节
原因:二进制编码限制。ASCII码使用7位二进制数来表示一个字符,总共可以表示2^7=128个不同的字符,这种设计既满足了当时的需求,也保证了编码的简洁性和效率。
ASCII码的最高位设置为0,这是出于奇偶校验的需要,确保了兼容性和错误检测的能力。

编码时,存储原理:

	* 存入字符:与ASCII码中选出对应的 十进制数字 ——>把其转化位 二进制数 存储
	* 存入数字:直接把 十进制数字 ——>转化为 二进制数 存储

注:ASCII码 中的字符包含 09(只包含一位数),az,A~Z

![img](file:///C:\Users\admin\AppData\Local\Temp\ksohtml7636\wps1.png)

char字符类型中数字表示的含义,对应于ASCII
1、
    char c9 = 199;  //199相对于char类型是指的ASCII值,199超过了ASCII值的范围
    char c10 = 65;  //65在ASCII中对应的是A,而1对应的是空白
    
2、1对应的是ASCII值为 空白 ,所以输出显示的也是空白

1711853471514

4. 布尔类型

说明:布尔类型是一种形式(int)的别名:

int ——> bool

True ——> 1 (其他 非0 都是 1 )

False ——> 0

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;

总结

常量

1. 什么是常量
   运行时,值不能改变

2. 常量分类
   字面量常量
   标识符常量

3. 定义常量两种方式(标识符常量)
   #define 常量名 值
   const 数据类型 常量名 = 值;

二进制

1. 进制
   二进制、十进制、十六进制

2. 进制转换
   

3. 原码、反码、补码
   正数和0: 三码一致
   负数:反码:原码基础上,符号位不变,其他位取反
        补码:反码+1
       

数据类型

1. 整数
   int
   short
   long
   long long
   每种类型分为:signed、unsigned
   等宽类型 eg:int32_t、uint8_t,需要有头文件<stdint.h>

2. 浮点
   float
   double
   long double

3. 字符
   本质:单字节整数
   字面量表示: 单引号
   占位符:%c
   分有符号和无符号,都是128种
   转义字符

4. 布尔
   ① #define
   ② C99 _Bool
   ③ C99 <stdbool.h>  bool、true、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"
}
下述两组 两个需要挨在一起:
    第一组:
                "-g",
                "${file}",

	第二组:
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"

标签:02,常量,int,double,数据类型,long,C语言,二进制,十进制
From: https://www.cnblogs.com/petard/p/18113936

相关文章

  • 备忘记录-20240404.构建服务的k8s资源清单
    导读记录一次搭建服务的成果框架graphTBC(Client)-->ig(ingress)ig-->np((nginx-php\nservice))ig-->tc((tomcat\nservice))np-->ng1(nginx)np-->ng2(nginx)ng2-..->ps((php\nservice))ng1-..->psps-->p1(PHP)ps-->p2(PHP)ps......
  • 【LC周赛391】3102. 最小化曼哈顿距离
    题目描述解析一道很有意思的题目和一份写得很优雅的C++代码。问题关键在于如何高效求解曼哈顿距离借用一位大神的图:因此有公式:曼哈顿距离=\(max(|x_1'-x_2'|,|y_1'-y_2'|)\),其中\(x'=x+y,y'=y-x\).【切比雪夫距离】为方便求解数组中的最大值和最小值,使用multiset数据......
  • C语言——深入理解指针
    1.数组名的理解实数组名就是数组⾸元素(第⼀个元素)的地址,但是有两个例外:•sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,单位是字节•&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的......
  • NOI2024 山东一轮省队集训
    Day1A.fibonacci题目描述令\(S_0=\tta\),\(S_1=\ttb\),定义斐波那契串\(S_i=S_{i-1}+S_{i-2}\),加号表示拼接。给定一个字符串\(t\),仅由字母\(\ttab\)构成,求\(S_{\infty}\)最短的一个子串满足\(t\)是该子串的子序列,输出该子串长度。\(1\le|t|\le1.5\times10^5\)。......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第一套)-三语言题解(CPP/Pytho
    ......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第二套)-三语言题解(CPP/Pytho
    ......
  • P1002 [NOIP2002 普及组] 过河卒
    emmmm...据说是比较简单的dp?(再一次意识到自己的菜)链接:https://www.luogu.com.cn/problem/P1002题目:总的思路就是一个状态转移方程吧:dp[x][y]=dp[x-1][y]+dp[x][y-1];然后如果发现这个点不能通过,那么强制修改dp[x][y]=0;代码:#include<iostream>#include<vector>#inc......
  • 【机器学习2021-李宏毅】学习笔记(一)
    基本概念结构化学习机器学习中的任务不只包括Regression和Classification两大类,还有StructureLearning,也就是函数的输出并不是一个标量或者一个类别,而是生成有结构的输出(比如图像、文本等)。误差曲面通过试不同的参数,然后计算对应情况下的loss,画出来的等高线图称为ErrorSurfa......
  • Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析 题解 [ 绿 ] [ 带权并查集 ]
    原题分析本题由于从一个节点发信息,同一个集合内的所有点都会收到信息,显然是一道要求维护各节点间关系的题,因此采用并查集的数据结构进行求解。但由于维护关系的同时还要维护权值,所以采用带权并查集,它是一种能维护某个节点与其祖宗节点之间关系的数据结构。带权并查集找父亲的......
  • 小美走公路(美团2024届秋招笔试第一场编程真题)
    题面核心思想正走一遍,反走一遍。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);Scannerscanner=newScanner(System.in);intn=scanner.nextInt();......