一、C语言篇——02.数据类型

01. 常量和变量

(1)C语言32个关键字

  • 数据类型关键字(12个)

    char,short,int,long,float,double

    unsigned,signed,struct,union,enum,void

  • 控制语句关键字(12个)

    if,else,switch,case,default,for,do,while,breakcontinue,goto,return

  • 存储类型关键字(5个)

    auto,extern,register,static,const

  • 其他关键字(3个)

    sizeof,typedef,volatile

(2)数据类型

#include <stdio.h>
int main()
{
    //字符型
    char ch = 'a';  //字符数据整型,大小:占1字节,0-127
    
    //整型
    short s = 10;  //短整型,大小:占2字节
    int i = 20;    //整型,大小:占4字节,
    long l = 30;   //长整型,大小:占4字节,
    long long ll = 40;  //更长的整型,大小:占8字节,
    
    //浮点型
    float f = 3.14;  //单精度浮点型,大小:占4字节。
    double d = 3.1415926;   //双精度浮点型,大小:占8字节,
    
    return 0;
}

printf()函数的格式化输出:

#include <stdio.h>
int main()
{
    int a = 3; //定义 整型变量a, 赋初值3
    int b = 5; //定义 整型变量b, 赋初值5
    int c = a + b; //定义 整型变量c, 赋值a+b的结果
    printf("%d + %d = %d\n",a,b,c); //%d:格式匹配符,匹配整型数据。
    return 0;
}

(3)变量和常量

常量:在程序运行过程中,其值不能被改变的量

  • 整型常量:100、-100
  • 浮点型常量:3.14、-0.23
  • 字符型常量:‘a’、‘1’、‘\n’
  • 字符串常量:“a”、“abcd”、“1234”

变量:在程序运行过程中,其值可以改变

  • 程序运行期间,运行修改
  • 变量名字遵守命名规则
  • 定义变量时,必须有相应的类型
  • 同一个代码块{ }内部,不能出现2个同名的定义

标识符命名规则:

  • 标识符不能是关键字
  • 标书费只能由字母、数字、下划线组成
  • 第一个字符必须味字母或下划线
  • 标识符中字母区别大小写
#include <stdio.h>
int main()
{
    
    int i;    //定义一个变量 名字是i,类型是int
    i = 0;    //将i赋值为10
    
    int a = 0;  //变量初始化,定义变量时同时赋值叫初始化
    return 0;
}

(4)define宏定义、const关键字

#include <stdio.h>

/*
	1、#开头的语句是预处理语句,无需分号结束
	2、定义一个宏定义标识符PI,他代表3.14,PI是常量
	3、宏定义以后的代码都可以使用PI来表示3.14
	4、在后面出现PI,预处理会替换成3.14
*/

#define PI 3.14
int main()
{
    //const关键字,作用是修饰一个变量为只读,让该变量不允许修改
    const int c = 100;
    return 0;
}

02. 进制

(1)进制之间的互相转换

二进制,“逢二进一”,二进制数没有2

八进制,“逢八进一”,八进制数没有8

  1. 十进制转二进制方法:用十进制除以2,取余后,逆序数写

    例:100 = 1100100b

  2. 十进制转八进制或十六进制,方法:与二进制类似

    例:100 = 0144 = 0x64

  3. 二进制转十进制方法:二进制的每一位乘以其对应的权值,然后相加

    例:11001101 = 1×2^7 + 1×2^6 + 1×2^3 + 1×2^2 + 1×2^0=205

  4. 八进制或十六进制转换成十进制,方法:与二进制类似

    例:07645 = 5+4×8+6×82+7×83=4005
    0xABC123 = 10×165+11×164+12×163+1×162+2×161+3×160

  5. 八进制或十六进制转换成二进制

    例:0xDCF968 = 1101 1100 1111 1001 0110 1000b

    0725726 = 111 010 101 111 010 110b

  6. 二进制转换成八进制或十六进制

    例:110101101001101 = 065515 = 0x6B4D

  7. 十进制小数转换成二进制,方法:乘2取整,顺序书写

    例:67.86 = 1000011.110111b

  8. 十进制小数转换成八进制或十六进制小数,方法:与2进制类似

  9. 二进制小数转换成十进制小数,方法:二进制的每一位乘以其对应的权值,然后相加

    例:11010.11011 = 24+23+21+2-1+2-2+2-4+2^-5 = 26.84375

  10. 二进制小数转换成八进制或十六进制小数

    例:1100101101010.11010010101b = 014552.6452 = 0x196A.D2A

  11. 八进制或十六进制小数转换成二进制小数

    例:03242.532 = 011 010 100 010.101 011 010b

    0xAB34.BD45 = 1010 1011 0011 0100.1011 1101 0100 0101b

(2)C语言表示相应进制数

十进制数正常的数字1-9开头,如123
八进制数以数字0开头,如0123
十六进制数以0x开头,如0x123
二进制数C语言不能直接书写二进制数
#include <stdio.h>
int main()
{
    int a;
    a = 10;    //以10进制的方式赋值
    a = 0123;  //以8进制的方式赋值
    a = 0xab;  //以16进制的方式赋值
    printf("a = %d\n",a);  //%d,以10进制的方式打印
    printf("a = %o\n",a);  //%d,以8进制的方式打印
   
    return 0;
}

03. 计算机存储方式(源码、反码、补码)

如存储1字节(8位)大小的数字(char)

原码(用户角度):原始的二进制

  • 用户的数字分为正负数,最高位为符号位,0代表正数,1代表负数
  • 左边是高位,右边是地位

​ +1: 0000 0001

​ -1: 1000 0001

原码存储导致的问题:

  1. 0有两种存储方式(1000 0000 和 0000 0000)
  2. 正数和负数相加,结构不正确(计算机只会加不会减,1 + (-1) )

反码:符号位不变,其他位取反(1变0, 0变1)。正数的原码和反码一样

原码存储导致的问题:0有两种存储方式

计算机存储数字是以补码的方式存储(为了解决负数的存储)

补码:反码加1。正数的原码、反码、补码都一样

04. sizeof关键字

sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位是字节。

sizeof的返回值是size_t,size_t在32位操作系统上是unsigned int类型

#include <stdio.h>
int main()
{
    int a;
    printf("%d\n",sizeof(a));  //4
    
    int len = sizeof(a);  //返回值是size_t
    return 0;
}

05. 整型

#include <stdio.h>
int main()
{
    int a = 10;
    scanf("%d",&a);  //输入语句,阻塞,等待用户输入内容,按回车结束
    printf("a = %d\n",a); // %d代表整型,占4字节
    
    short b;
    scanf("%hd",&a);
    printf("a = %hd\n",a);  //%hd代表短整型,占2字节
    
    long int c;
    scanf("%ld",&a);
    //%ld代表长整型,Windows占4字节,Linux(32位)占4字节,Linux(64位)占8字节
    printf("a = %ld\n",a);
    
    long long int c;
    scanf("%lld",&a);
    printf("a = %lld\n",a);//%lld代表长长整型,占8字节
    
    return 0;
}

06. 字符型

(1)char类型

内存中没有字符,只有数字

一个数字,对应一个字符,这种规则就是ASCII码

字符类型本质就是1个字节大小的整型

#include <stdio.h>
int main()
{
    //字符
    char ch = 'a';
    printf("ch = %c\n",ch);  //%c代表字符,占1字节
    
    //小写字母转大写字母
    printf("小写字母转大写字母: %c\n",'a'-32);  //小写字母比大写字母大32字节
    
    return 0;
}

(2)转义字符

转义字符含义ASCII码值(10进制)
\a警报007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\代表一个反斜线字符""092
代表一个单引号(撇号)字符039
"代表一个双引号字符034
?代表一个问号063
\0数字0000
\ddd8进制转义字符,d范围0~73位8进制
\xhh16进制转义字符,h范围09,af,A~F3位16进制
#include <stdio.h>
int main()
{
    char ch = '\n';   //回车
    printf("aaa %c bbb",ch);
    
    printf("aaa \n bbb");
    return 0;
}

08. 浮点型

float 单精度 4字节

double 双精度 8字节

#include <stdio.h>
int main()
{
    float f = 3.14f;   //数值后面加f
    printf("f = %f\n",&f);  //%f代表单精度浮点型,3.140000 后面默认6位
    
    double lf = 3.14;   //数值后面加f
    printf("lf = %lf\n",&lf);  //%lf代表双精度浮点型,3.140000 后面默认6位
    return 0;
}

09. 类型限定符

限定符含义
extern声明一个变量,extern声明的变量没有建立存储空间。 extern int a;
const定义一个常量,常量的值不能修改。 const int a = 10;
volatile防止编译器优化代码
register定义寄存器变量,提高效率。register是建议型的指令,而不是命令型的指令,如果CPU有空闲寄存器,那么register就生效,如果没有空闲寄存器,那么register无效。
#include <stdio.h>
int main()
{
    int a;
    a = 10;
    a = 20;
    a = 30;
    //编译器会优化,直接 a = 30;
    
    volatile int b;
    b = 10;
    b = 20;
    b = 30;
    //编译器不会优化,会一个一个赋值
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值