目录
四,整型数据在计算机中的存储方式(short, int,long ,long long ,char)
一,c语言的数据类型
有4大数据类型
(1)基本类型:就是c语言已经帮我们定义好了,我们可以直接使用
整型数据:用来保存整数的
short (int) //短整型
int //整型
long (int) //长整型
long long (int) //长长整型
表示的数据的范围不一样
在32位机器上 1字节 = 8bit
short ->2个字节
int ->4个字节
long ->4个字节
long long ->8个字节
记不住怎么办?
sizeof(***) ->求***这个数据类型占几个字节
sizeof(int) ->4
int a = 5;
sizeof(a); ->求a对应的类型占几个字节
unsigned /signed
表示无符号/有符号
无符号:代表所有bit位都是数据位
有符号:最高位代表符号位,0:正 1:负 。其余bit位代表数据位
unsigned /signed是用来修饰数据类型的
unsigned int ->无符号整型
signed int ->有符号整型
如果省略,就默认是有符号,-》 int <-> signed int
字符型数据:用来保存字符
char :在所有机器上都是占1个字节
unsigned char ->无符号的字符型
浮点型数据:用来保存小数
单精度浮点型
float 4个字节
双精度浮点型
double 8个字节
long double 12个字节
(2)构造类型:我们自己定义的类型
数组
结构体
联合体(共用体)
枚举
(3)指针类型
(4)空类型 void
void在c语言中有三个地方用到
1,void * 通用指针
2,void func()
{}
代表这个函数不需要返回值
3,int func(void)
{}
代表这个函数不需要参数
如果一个函数不需要参数,我们一般会把void省略、
int func()
{}
c语言的数据按是否可以修改(可写)分为两种
常量(不可写)
变量(可写)
二,常量
在程序的运行过程中,不可以改变它的值,常量有多种类型
(1)整型常量
在代码中由一串数字组成(整数)
以0开头的,由0-7这8个数字组成,为八进制:
0123
0456
0678//error
以0x/0X开头的,为十六进制:
0-9
a(A)-f(F)
0xa : 10
0xb : 11
....
0xf : 15
其他就是十进制
123 ->没有后缀的,默认是int
-1234
123l ->long int
为什么没有二进制的常量呢?
因为八进制,十进制,十六进制的数都可以转换为二进
(2)字符常量: 是用单引号''引起来的一个或多个字符的序列
比如: 'a' '4'在计算机中,字符的保存,保存的是字符对应的ascii码,
而不是它的形状(保存不了形状)
ascii码:把每一个字符和一个对应的数字相关联
man ascii
八进制 十进制 十六进制
Oct Dec Hex Char Oct Dec Hex Char
000 0 00 NUL '\0' 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
'A' -> 65
假如你想保存这个字符A,其实不是保存'A'这个形状,而是保存了65这个整数
(所以,其实char本质上是整型)
字符:
分为两种:
普通字符:可以显示形状(键盘可以敲出来)
'a' 'b' '3'
转义字符:没有形状,但是有特殊的含义
'\n' ->换行
'\r' ->回车符
'\t' ->制表符 tab
'\0' ->空字符,用在字符串的末尾
'\000' :由\开始,后面接一个,两个或三个八进制数字
这些八进制数字是用来指定所期望的字符
'\103' -> 'C'
'\xhh':由\x开头,后面跟一个或者两个十六进制的数字
这些八进制数字是用来指定所期望的字符
'\x43' -> 'C'
例子:打印字符C
char a = 'C';
printf("%c\n",a);//%c用来打印字符
char b = '\103';
printf("%c\n",b);//%c用来打印字符
char c = '\x43';
printf("%c\n",c);//%c用来打印字符
char d = 67;//直接用ascii码赋值
printf("%c\n",d);
(3)浮点常量 -》小数
后缀可以是f/F l/L
f/F -> float
l/L -> long double
没有后缀-》默认为double
1.4 ->double
1.5l ->long double
5.89f ->float
0.12 整数部分可以省略 .12
1.00 小数部分可以省略 1.
科学计算法:
由整数部分,小数点,小数部分,一个e/E,一个可选的带符号的整数,
和一个可选的表示类型的后缀(f/F l/L)组成
123.45 -》 1.2345*10^2 -> 1.2345e2
(4)枚举常量
三,变量
变量是指在程序的运行过程中,其值可以被修改
变量会对应一个可读可写的内存单元
int a;
a = 10;
.....
a = 20;
char c;
float b;
变量是用来保存数据的,那它肯定是需要内存空间的,需要多大呢?由变量的类型决定
这个空间必须要是可读可写的,因为需要被修改
所以,我们定义变量的时候,需要定义它的类型
变量的定义格式:
数据类型 变量名 [= 变量的初始值]; []代表可选
如:
int a;
int b = 10;
c语言的标识符:用来标识一个“对象的(变量,函数.....)”
标识符只能由数字,字母下划线组成,并且不能以数字开头,并且不能是c语言的关键字
c语言的关键字:在c语言中有了特殊的含义,比如int main return,printf......
asd
a_c
a_5
b_5_r
%$##@//error
变量名:和标识符的规则一样
给这个空间(内存单元)取了一个名字
变量的内存单元:
用来保存这个变量数值的储存空间,这个储存空间会有一个编号(地址)
变量的值:
变量的储存单元里面的内容
int c = 10;
访问一个变量:
int a = 10;
int b;
b = a;//把a的值拿出来并赋值给b 1
a = 100;//把100这个数值保存到a对应的那个空间中去,会覆盖掉原来的值 2
printf("a=%d\n",a);//把a的值拿出来并打印 3
在c语言中,任何变量,都有且仅有两层含义
1,代表变量的值:右值
1,3
2,代表变量的储存空间(地址):左值
2
四,整型数据在计算机中的存储方式(short, int,long ,long long ,char)
整数在计算机中是以二进制的补码形式存在的
原码:把它转化成二进制
10 -》 1010
补码:
正数的补码就是它的原码
int a = 6;
0000 0000 0000 0000 0000 0000 0000 0110
负数的补码是他 绝对值 的原码 取反 加一
int a = -6;
绝对值: 6
绝对值的原码:0000 0000 0000 0000 0000 0000 0000 0110
绝对值 的原码 取反:1111 1111 1111 1111 1111 1111 1111 1001
绝对值 的原码 取反 加一:1111 1111 1111 1111 1111 1111 1111 1010
-6的补码:1111 1111 1111 1111 1111 1111 1111 1010