变量与常量,数据类型(整型、字符型、实型、存储机制、进制转换)-系列二

目录

知识总结

一、常量

二、变量

三、有符号整型

四、无符号整型

五、char字符类型

六、实型(浮点数、小数)

七、进制和转换


知识总结

一、常量

常量:不会变化的数据。不能被修改。

       1. “hello”、'A'、-10、3.1415926(浮点常量) 

       2. #define PI 3.1415      【强调】:没有分号结束标记。 【推荐】 定义宏: 定义语法: #define 宏名 宏值

       3. const int a = 10; 定义语法:const 类型名 变量名 = 变量值。

           const关键字: 被该关键字修饰的变量,表示为只读变量。

#include <stdio.h>

#define PI 3.1415			// 常量

int main01(void)
{
	// 圆的面积  s = PI x 半径的平方
	// 圆的周长  l = 2 * PI * r	
	//int r = 3;				// 变量
	const int r = 3;		// 只读变量

	float s = PI * r * r;
	float l = 2 * PI * r;

	//printf("圆的周长为:%f\n", l);  //18.849001
	//printf("圆的面积为:%f\n", s);  //28.273500

	printf("圆的周长为:%.2f\n", l);	// 指定小数点后保留2位, 对第3位做,4舍五入
	printf("圆的面积为:%.2f\n", s);	// 指定小数点后保留2位

	return 0;
}

二、变量

变量:会变化的数据。能被修改。

       定义语法:类型名 变量名 = 变量值。(一般方法)

       变量三要素:类型名、变量名、变量值。       int r = 3; float s = PI*r*r;(变量值是一个表达式)

       变量的定义:   int a = 40;

       变量的声明:  1) int a;   没有变量值的变量定义 叫做声明。

                              2)extern int a; 添加了关键字 extern。

       1. 变量定义会开辟内存空间。变量声明不会开辟内存空间。

       2. 变量要想使用必须有定义。

       当编译器编译程序时,在变量使用之前,必须要看到变量定义。如果没有看到变量定义,编译器会自动找寻一个变量声明提升成为定义。

          如果该变量的声明前有 extern 关键字,无法提升。

       【建议】:定义变量时。尽量不要重名。

标识符:

    变量和常量的统称。

    命名规则:    

1. 通常常量使用大写、变量使用小写。大小写严格区分。

 2. 只能使用字母、数组、下划线(_)命名标识符。且,数字不能开头。 a-z/A-Z/0-9/_

                int a5ir = 10; ok

                int _34F = 6; ok

                float s2_i85c = 5.4;  ok

                int 98ti_54 = 4;  error.

3. 禁止使用关键字和系统函数作为标识符名称。  main/system/printf/sleep....

sizeof关键字:

    不是函数。用来求一个变量、类型的大小。 返回一个 无符号整数。 使用 %u 接收返回值。

    方法1: sizeof(类型名)    -- sizeof(int)

    方法2: sizeof(变量名)        --- int a = 20; sizeof(a)

  【了解】: sizeof 变量名/类型名        举例1: sizeof int

                        举例2: sizeof a

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define N 1024		// 定义常量

int main0301(void)
{
	int a = 10;		// 定义变量: 三要素

	short b = 20;

	long c = 30;
	long long d = 40;

	printf("================a===%d\n", sizeof(a));
	printf("================b===%d\n", sizeof(b));
	printf("================c===%d\n", sizeof(c));
	printf("================d===%d\n", sizeof(d));

	printf("int 大小为:%d\n", sizeof(int));
	printf("short 大小为:%d\n", sizeof(short));
	printf("long 大小为:%d\n", sizeof(long));
	printf("long long 大小为:%d\n", sizeof(long long));

	system("pause");

	return EXIT_SUCCESS;
}

int main0302(void)
{
	int a = 3;
	short b = 4;
	long c = 5;			// 5L  5l
	long long d = 6;  // 5LL  5ll

	printf("sizeof(int) = %d\n", sizeof(int));
	printf("sizeof(short) = %d\n", sizeof(short));
	printf("sizeof(long) = %d\n", sizeof(long));
	printf("sizeof(long long) = %d\n", sizeof(long long));

	printf("--------------------------------------\n");

	unsigned int aun = 3;		// 3u
	unsigned short bun = 4;		// 3u
	unsigned long cun = 5;		// 3lu
	unsigned long long dun = 6;	// 3llu

	printf("sizeof(unsigned int) = %d\n", sizeof(unsigned int)); // aun
	printf("sizeof(unsigned short) = %d\n", sizeof(unsigned short));
	printf("sizeof(unsigned long) = %d\n", sizeof(unsigned long));
	printf("sizeof(unsigned long long) = %d\n", sizeof(unsigned long long));
}

三、有符号整型

    signed: 有符号 (超级不常用, 通常省略):        int a = 10; a = -7;    

    int类型:    %d        4 字节            

        int 名 = 值;

    short类型:    %hd        2 字节

        short 名 = 值;        short s1 = 3;

    long类型:    %ld        4 字节        (windows: 32/64: 4字节; Linux:32位:4字节, 64位:8字节)  

        long 名 = 值;        long len = 6;

        long long 类型:%lld        8 字节

        long long 名= 值;    long long llen = 70;

四、无符号整型

    unsigned: 无符号         只表示数据量,而没有方向(没有正负)    

    unsigned int类型:    %u        4 字节

    unsigned int 名 = 值;    
        
    unsigned int a = 40;        

    unsigned short类型:    %hu        2 字节

    unsigned short 名 = 值;        

    unsigned short s1 = 3;

    unsigned long类型:    %lu        4 字节 (windows: 32/64: 4字节; Linux:32位:4字节, 64位:8字节)

    unsigned long 名 = 值;        

    unsigned long len = 6;

    unsigned long long 类型:%llu        8 字节

    unsigned long long 名 = 值;    

    unsigned long long llen = 70;

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main0401(void)
{
	size_t var = 10;
	printf("var = %u\n", var);

	unsigned int a = 10u;  // 简写成 unsigned int a = 10;
	unsigned short b = 20u;// 简写成 unsigned short b = 20;
	unsigned long c = 30Lu; 
	unsigned long long d = 40LLu;

	printf("unsigned int 型数据值:%u\n", a);
	printf("unsigned short 型数据值:%hu\n", b);
	printf("unsigned long 型数据值:%lu\n", c);
	printf("unsigned long long 型数据值:%llu\n", d);

	system("pause");

	return EXIT_SUCCESS;
}

五、char字符类型

    存储一个字符。本质是ASCII码。 ‘A’、‘a’、‘%’、‘#’、‘0’

    格式匹配符: %c

    ‘A’:65

    ‘a’:97

    ‘0’:48

    ‘\n’:10

    ‘\0’: 0
转义字符:

    ‘\’    将普通字符转为 特殊意。 将特殊字符转为本身意。

    '\n' 和 ‘\0’

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main0501(void)
{
	char ch = 'A';  // 65

	//printf("1 ch = %c\n", ch);
	printf("1 ch = %d\n", ch);

	ch = 'm'; //

	//printf("2 ch = %c\n", ch);
	printf("2 ch = %d\n", ch);

	//ch = 97;
	ch = 'a';	// 97

	//printf("3 ch = %c\n", ch);
	printf("3 ch = %d\n", ch);

	system("pause");
	return EXIT_SUCCESS;
}

// A -- 65 a -- 97 
int main0502(void)
{
	char ch = 'M';
	char var = '5';

	printf("ch = %c\n", ch + 32);
	printf("var = %c\n", var+4);

	printf("'\\n\'х─ох╬ф=%d\n", '\n');

	system("pause");
	return EXIT_SUCCESS;
}

六、实型(浮点数、小数)

    float:    单精度浮点型。        4字节

    float v1 = 4.345;

        %f格式匹配符。 默认保留 6 位小数。

    double:双精度浮点型。        8字节        【默认】

     double v2 = 5.678;

    unsigned float v1 = 4.345;    无符号的 float 数据

    unsigned double v2 = 5.678;    无符号的 float 数据

    printf("n = %08.3f\n", n);

        输出的含义为:显示8位数(包含小数点), 不足8位用0填充。并且保留3位小数。对第4位做四舍五入。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main0601(void)
{
	float m = 3.145;
	double n = 4.566545;

	printf("m = %08.2f\n", m);
	printf("n = %08.3lf\n", n);

	system("pause");
	return EXIT_SUCCESS;
}

七、进制和转换

    十进制转2进制。    --- 除2反向取余法。 【重点】

    十进制转8进制。    --- 除8反向取余法。

    十进制转16进制。--- 除16反向取余法。

        int a = 56;    -- 111000

        int b = 173;    -- 10101101

    2进制转10进制。

        2^10 = 1024

        2^9 = 512

        2^8 = 256

        2^7 = 128

        2^6 = 64

        2^5 = 32

        2^4 = 16

        2^3 = 8

        2^2 = 4

8进制:

    8进制转10进制。    

    定义8进制数语法:    

            056: 零开头,每位数0~7之间。    ---- 46

            0124:                 ---- 84

    8进制转2进制。

    按421码将每个八进制位展开。

            056:5--》 101。 6--》 110  。

                101110

            05326:5 --》 101。 3--》 011。 2--》 010。 6--》 110

    2进制转8进制:

        1 010 111 010 110:    012726

        自右向左,每3位一组,按421码转换。高位不足三位补0
    
16进制:

    语法: 以0x开头,每位 取 0-9/A-F/a-f

            A -- 10

            B -- 11

            C -- 12

            D -- 13

            E -- 14

            F -- 15
    16 -- 10:

        0x1A:  16+10 = 26

        0x13F:15+3x16+256 
    
    16 -- 2:

        0x1A:    00011010

        0x13F:    000100111111

    2 -- 16:

        0001 0011 1111:        13F

        自右向左,每4位一组,按8421码转换。高位不足三位补0

总结:

    int m = 0x15F4;

    int n = 345;

    int var = 010011; // 不允许。 不能给变量直接复制 二进制数据。

    输出格式:

        %d %u %o %x %hd %hu %ld %lu %lld %llu %c %f %lf

        %d %u %x %c %s 

存储知识:

    1 bit位  就是一个 二进制位

    一个字节 1B = 8bit位。 

    1KB = 1024B
        
    1MB = 1024KB

    1GB = 1024MB

    1TB = 1024GB

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main0701(void)
{
	int a = 0x2C;  // 等价 0x2c 

	printf("10进制显示 a = %d\n", a);
	printf("8进制显示 a = %o\n", a);
	printf("16进制显示 a = %x\n", a);

	system("pause");
	return EXIT_SUCCESS;
}

八、写在最后

 对于热爱编程的同学来说,大部分人刚开始只是知其然却不知其所以然,这是一个普遍现象。主要原因是随着工作时间增加,虽然大部分人都是每天上班下班忙忙碌碌,但仅有少数人才真的下功夫去研究自己做的编程工作,更不愿意去学习、思考。知识只有建立起关联并形成体系的时候,才能真正提升你的能力,帮助你用来分析和解决问题。请微信联系:ossce666  如何搭建一套自己的知识体系,将沉淀的知识变现,也可以关注:知识变现系统搭建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值