C语言基础

一、计算机中的数据存储

1 单位换算

1bit ----->可以存下一个二进制数

1Byte = 8bit

1KB = 1024Byte

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

2 进制转换

二进制、八进制、十进制、十六进制(六十进制、365进制)

不同进制数的数据怎么计算

二进制

八进制

十进制

十六进制

基数

2

8

10

16

数码

0、1

0-7

0-9

0-9、A-F

位权

从右向左数从

2^0、2^1、2^2、2^3····

8^0、8^1、8^2、8^3····

10^0、10^1、10^2、10^3····

16^0、16^1、16^2、16^3····

前导符

0b

0

0x

i)十进制转二进制

辗转相除法

11 ----->转二进制1011

从下往上取二进制数,并且最下面的一个是最左侧一个二进制数的值

ii)任何进制转十进制

每一个的位权*每一位数码相加

0X13 ------> 3*1+1*16=19

0XF ------> 15

0111 1011 ------> 123

0176 ------> 6+56+64 = 126

0000 0001 1100 0000 ------> 256+128+64 = 448

iii)十进制转其他进制

辗转相除法

64 ---->转十六进制0x40

从下到上,从左到右

iv)二进制转八进制

二进制:1111

十进制:8421

每三位二进制转一位八进制

0110 1101 -----> 155

023 ----->01 0011

017 ----->00 1111

0111 1110 -----> 176

0652 ----->1 1010 1010

1100 1011 ----->313

v)二进制转十六进制

二进制:1111

十进制:8421 ----->8+4+2+1=15

每四位二进制数转一位十六进制数

0x1F -----> 0001 1111

1101 1110 -----> 0XDE

0xFF ----> 1111 1111

0xCE -----> 1100 1110

0XB3 ------> 1011 0011

0101 1101 -----> 0X5D

二、基本数据类型

1 整形

用于存储整型数据:1、2 、3、4····

int

long (int)

long long (int)

short (int)

大小

4Byte

32位占4Byte

64位占8Byte

8Byte

2Byte

占位符/格式符

%d

%ld

%ld

%d

2 浮点型

用于存储浮点型数据:3.14、0.98

浮点型数据在计算机中存储的是近似值

float

double

大小

4Byte

8Byte

占位符

%f

%lf

3 字符型

用于存储字符类型数据:'a'、'0'(字符0)

字符类型数据指的是使用''引起来的单个字符

字符类型数据在计算机中实际是以ASCII码形式存储的

'0' ---->48 '\n' ---->10

'A' ---->65 'SPACE' ----->32

'a' ----->97 NULL,'\0' ----->0

想要通过字符'9'得到整形9:'9'-48 '9'-'0'

char

大小

1Byte

占位符

%c ---->用于字符格式

%d ---->用于ASCII码

三、常量

常量就是程序运行过程中值不能修改的量

常量通常作为右值

1 整型常量

整数1、2、3、4

输出格式符%d、%ld

在gcc环境下,默认常量为int类型

2 浮点型常量

浮点数3.14、0.98

输出格式符%f、%lf 浮点型存储的是近似值

3 字符型常量

由单引号引起来的单个字符叫字符型常量

'0'、'\n'·····

输出格式符%c/%d ----->%c输出字符格式、%d输出整形格式

4 字符串常量

由双引号引起来的一个或多个字符叫字符串常量

"0"、"a"、"hello world"······

只存在字符串常量不存在字符串类型,C语言中不直接支持字符串类型

格式符/占位符:%s

四、宏定义

宏定义是一个简单的替换

宏定义的位置:

一般在头文件下方,主函数上方

宏替换发生在编译的预处理阶段

1 无参宏

i)格式

#define 宏名 宏体

在代码中所有出现宏名的位置,都是用宏体进行替换

ii)替换阶段和过程

宏定义的替换发生在预处理阶段

宏定义只做简单的替换,宏定义的过程中没有运算

2 带参宏

#define 宏名(参数1,参数2,参数3,····) 宏体 

一般情况下,带参宏的宏体都是对参数相关的操作

带参宏的参数一定是由程序在使用宏时手动给出的,使用带参宏时()中的参数给的是什么,带参宏的参数就获取到什么。

五、变量

程序运行过程中可以修改的量,可以做右值也可以做左值。

1 定义格式

存储类型 数据类型 变量名; //定义一个变量

(1)一般实际使用时会省略掉存储类型,直接写成数据类型 变量名

(2)数据类型指的是C语言提供的数据类型,目前学习阶段都使用2基本数据类型

2 存储类型

6种存储类型,目前阶段了解即可

auto:自动类型,默认是auto类型

extern:外部类型,表示从外部引入的变量

static:静态变量

const:定义常量,const修饰的变量值不能更改

register:寄存器类型,表示将变量定义到寄存器中,好处提高效率

volatile:每次从内存中取该变量的值

3 变量的初始化和赋值

变量名在C语言中是一个标识符,要符合标识符的命名规范:

(1)由数字、字母和下划线构成

(2)不能以数字开头

(3)严格区分大小写

(4)不能和C语言的32个关键字重复(不需要记关键字,只要代码发生高亮改名即可)

初始化:定义变量的同时给变量值叫做初始化

赋值:已有变量,使用=运算符给变量值叫赋值

变量不初始化默认是随机值,如果实在不知道给变量什么值直接赋值为0即可。 

4 强制类型转换

i)隐式的强制类型转换

看不见数据强转的过程,强转过程自动发生

ii)显式的强制类型转换

看得见数据强转的过程

格式: (强转的类型)要强转的数据;

iii)大数据类型向小数据类型强转

大的数据类型向小的数据类型强转是不安全的,因为小的数据类型没有足够的空间存下原有的数据,会发生数据的截取(能存多少存多少)

小的数据类型向大的数据类型强转是安全的。

iv)有符号数和无符号数之间的强转

如果有符号数和无符号数一起参与运算,默认强转成无符号数。

5 有符号数和无符号数

默认定义的都是有符号数

如果想要定义无符号数,需要使用unsigned

signed int a; //定义了有符号int类型的变量a

unsigned int a1; //定义了一个无符号int类型的变量a1

6 原码、反码和补码

原码是给人看的

反码是原码转补码的中间格式

计算机中存储的全是补码,计算机中只有加法器,没有减法器

i)无符号数

原码就是二进制表示形式

原码、反码和补码都是同一个

无符号数12 -----> 1100(原、反补)

ii)有符号数

有符号数的最高位表示符号位

0正1负

有符号正数:

原码、反码和补码一致

有符号负数:

原码:数据的二进制形式

反码:除符号位外其他位取反

补码:反码+1 

求原码、反码和补码:

1. 18原=反=补=0001 0010 

2. -93:原=1101 1101 反=1010 0010 补=1010 001

3. -106:原=1110 1010 反=1001 0101 补=1001 0110

求数据取出的值:
unsigned int a = -9;               -9

unsigned int a1 = -231;         -231

unsigned short a2 = -16;       65520

求NUM的值
#define N 12

#define M N*2+1

#define NUM M*M+N/3+(M*N)/2

NUM=N*2+1*N*2+1+12/3+(N*2+1*12)/2

        =12*2+1*12*2+1+12/3+(12*2+1*12)/2

        =71
 

                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值