一、计算机中的数据存储
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
9万+

被折叠的 条评论
为什么被折叠?



