首页 > 代码库 > C语言基础课程 第四课 它山之石可以攻玉---C语言数据类型和表达式

C语言基础课程 第四课 它山之石可以攻玉---C语言数据类型和表达式

??

1         C语言中的数据类型

1.1      常量

常量就是在程序中不可变化的量

1.1.1         #define

#define MAX 10

Define的常量一般用大写定义,这是惯例,而不是强制要求

1.1.2         const

const int i =100;//定义了一个int型的常量

1.2      字符串常量

“hello world”

C语言“”都是字符串常量

1.3      二进制数、位、字节与字

我们习惯于十进制的数:1012

一个位只能表示0,或者1两种状态,简称bit

一个字节为8个二进制,称为8,简称BYTE

一个字为2个字节,简称WORD

两个字为双字,简称DWORD

0 1 10 11 100

 

 

1.4      八进制

八进制为以8为基数的数制系统,C语言当中0表示八进制,0666;

1.5      十六进制

十六进制值16为基数的数制系统,C语言中用0x表示十六进制

十进制

十六进制

二进制

0

0

0000

1

1

0001

2

2

0010

3

3

0011

4

4

0100

10

a

1010

11

b

1011

12

c

1100

13

d

1101

14

e

1110

15

f

1111

16

10

 

 

1.6      原码

将最高位做为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值

+7的原码是00000111

-7的原码是10000111

+0的原码是00000000

-0的原码是10000000

 

 

1.7      反码

一个数如果值为正,那么反码和原码相同

一个数如果为负,那么符号位为1,其他各位与原码相反

+7的反码00000111

-7的反码11111000

-0的反码11111111

 

1.8      补码

原码和反码都不利于计算机的运算,如:原码表示的7-7相加,还需要判断符号位。

正数:原码,反码补码都相同

负数:最高位为1,其余各位原码取反,最后对整个数 + 1

-7的补码:=

 10000111(原码)

111111000(反码)

11111001(补码)

+0的补码为00000000

-0的补码也是00000000

补码符号位不动,其他位求反,最后整个数+ 1,得到原码

用补码进行运算,减法可以通过加法实现

7-6=1

7的补码和-6的补码相加:00000111 + 11111010 = 100000001

进位舍弃后,剩下的00000001就是1的补码

-7+6 = -1

-7的补码和6的补码相加:11111001 + 00000110 = 11111111

11111111-1的补码

 

1.9      10进制转化16进制技巧

16为除数,求商数和余数,直到商数为0的时候,将余数倒过来就是转化后的16进制数

 

1.10 sizeof关键字

sizeofsize_t类型

 

1.11 int类型

1.11.1      int常量,变量

int是最常用的数据类型,在32位和64位系统下都是4个字节

1.11.2      printf输出int

printf(“%d”, 可以是常量或者变量)

1.11.3      printf输出八进制和十六进制

按照8进制输出printf("%o\n", MYINT);

按照16进制输出printf("%x\n", MYINT);

1.11.4      shortlonglong longunsigned int

short代表2个字节的int

long32位系统下是4个字节的int,在64位系统下是8个字节的整数

long long 不论是在32位还是在64位系统下都是8个字节的int

unsigned short

unsigned int

unsigned long

 

9l,9L,9ll,9LL,9u,9ull,9ULL

1.11.5      整数溢出

   unsigned int i = 0xffffffff;

   i = i + 1;

   printf("%u\n", i);

 

 

1.11.6      大端对齐与小端对齐

ArmX86构架的CPU都是采用小端对齐:高位放入高地址,低位放入底地址

UNIX大型服务器CPU都是大端对齐的,高位放入底地址,低位放入高地址

1.12 char类型

1.12.1      char常量,变量

‘a’;表示一个字符

Charc语言当中大小是1个字节

 

Char就是一个字节整数

 

1.12.2      printf输出char

printf(“%c”, 字符类型);

1.12.3      不可打印char转义符

\a,警报

\b退格

\n换行

\r回车

\t制表符

\\斜杠

\’单引号

\”双引号

\?问号

1.12.4      charunsigned char

char取值范围为-128127

unsigned char0-255

1.13 浮点float,double,longdouble类型

1.13.1      浮点常量,变量

5f;float

5d;double

Int a = 3;

Int b = 2;

Double c = 3 /2 ;;//相当于两个整数相除的结果是整数,将整数赋给c,那么小数点精度会丢失,所以这个时候c=1.00000

1.13.2      printf输出浮点数

 

%f,%Lf

1.14 类型限定

1.14.1      const

const 不可改变的量

1.14.2      volatile

不要让编译器自作聪明的去优化代码

1.14.3      register

register int I =10;

register意思是告诉编译器,这个变量要在寄存器里面运算,而不是通过内存运算,这样会大大的提升效率。

Register只是一个建议,而不是命令。如果程序执行的时候,CPU有空闲的寄存器,那么register就是有效的,如果没有空闲寄存器,那么register就是无效的

2         字符串格式化输出和输入

2.1      字符串在计算机内部的存储方式

字符串是内存中一段连续的char空间,以’\0’结尾

2.2      printf函数,putchar函数

printf格式字符

字符

对应数据类型

含义

d

int

接受整数值并将它表示为有符号的十进制整数

hd

Short int

短整数

hu

Unsigned short int

无符号短整数

o

unsigned int

无符号8进制整数

u

unsigned int

无符号10进制整数

x / X

unsigned int

无符号16进制整数,x对应的是abcdefX对应的是ABCDEF

f

floatdouble

单精度浮点数双精度浮点数

e / E

double

科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写

c

char

字符型。可以把输入的数字按照ASCII相应转换为对应的字符

s / S

char * / wchar_t *

字符串。输出字符串中的字符直至字符串中的空字符(字符串以‘\0‘结尾,这个‘\0‘即空字符)

p

void *

16进制形式输出指针

%

%

输出一个百分号

printf附加格式

字符

含义

l

附加在d,u,x,o前面,表示长整数

-

左对齐

m(代表一个整数)

数据最小宽度

0

将输出的前面补上0直到占满指定列宽为止不可以搭配使用-

N(代表一个整数)

 宽度至少为n不够以空格填充

 

2.3      scanf函数与getchar函数

 

3         运算符表达式和语句

3.1      基本运算符

3.1.1         =

数据对象:泛指数据在内存的存储区域

左值:表示可以被更改的数据对象

右值:能赋给左值的量

3.1.2         +

3.1.3         

3.1.4         *

3.1.5         /

3.1.6         %

取余数,两个数相除的余数。

3.1.7         +=

加等于

3.1.8         -=

减等于

3.1.9         *=

乘等于

3.1.10      /=

除等于

3.1.11      %=

取余等于

3.1.12      ++

自加1

i++;先计算i的值,然后再++

++i;先++,然后在计算I

3.1.13      --

自减一

3.1.14      逗号运算符

   int a = 2;

   int b = 3;

   int c = 4;

   int d = 5;

   int i = (a = b, c + d);

 

逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值。

3.1.15      运算符优先级

优先级

运算符

结合性

1

++(后缀),--(后缀),()(调用函数),{}(语句块),.,->

从左到右

2

++(前缀)--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值)&(取地址),(type)(类型转化)

从右到左

3

* / %

从左到右

4

+-

从左到右

5

<< >>

从左到右

6

< > <= >=

从左到右

7

== !=

从左到右

8

&

从左到右

9

^

从左到右

10

|

从左到右

11

&&

从左到右

12

||

从左到右

13

?

从右到左

14

=,*=,%=,+=,-=,<<=,>>=,&=,|=,^=

从右到左

15

,(逗号运算符)

从左到右

 

3.2      复合语句

{}代码块

3.3      类型转化

double f = (double)3 / 2;

 

 

C语言基础课程 第四课 它山之石可以攻玉---C语言数据类型和表达式