数据类型注意要点2017-9-6

  1. 变量:在程序执行过程中其值可以改变的量叫做变量
  2. 常量:在程序执行过程中其值不能改变的量

    常量定义的格式:

    1.Const float pi =3.14159; //const 修饰的变量为常量

    //Pi=3.2; //err const修饰的变量不能再次赋值,但可以参与计算

    2. 常量定义第二种方式:#define 常量值 值 即#define MAX 100

3. 定义标识符

标识符可以包含字母、数字、下划线,第一个字符必须为字母下划线,不能使用c语言关键字

    标识符定义时见名之义

  1. 声明和定义的区别,声明变量不需要建立存储空间

    定义变量需要建立存储空间,如:int b;

    如extern关键字只做声明,不做任何定义

    Int b 它既是声明,同时又是定义

     

  2. 进制间转换
    1. 十进制转为二进制:除二取余,倒排序法
    2. 二进制转为10进制:权值法 即二进制1010 = 0*2^0+1*2^1+0*2^2+1*2^3= 10
    3. 为什么用A…F代表16进制的10…15

      因为10在16进制数中会让程序员搞不清是一位数还是两位数,所以用A..F代表两位的数值。

    4. 在二进制转10进制时可以使用8421法则:即二进制转换成10进制时可以依次加上2的n次幂
    5. 十进制的小数转换成二进制,小数部分跟2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果。

       

如下二进制:101011

8421法则

32

16

8

4

2

1

二进制数101011

1

0

1

0

1

1

十进制数

32

0

8

0

2

1

十进制数相加后结果

43

  

  

  

  

  

  1. 二进制数和八进制间相互转换

    将二进制数从末尾开始三位分割再转化成八进制

    将一个八进制数转换成二进制如果数不够用0补位

     

  2. 二进制和十六进制间相互转换

    将二进制数从末尾开始四位分割再转成十六进制

     

  3. 八进制转换成十六进制,需要以二进制为中间键再转换成十六进制
  4. 如何表示相应进制数

    十进制:采用1-9来开头来表示

    八进制:以数字0开头如:0123

    十六进制:以0x开头如:0x32

     

  5. 在c中表示各个进制

    十进制

    【数据类型 变量 值】

    八进制

    【数据类型 变量 0+值】

    十六机制

    【数据类型 变量 0x+值】

     

    打印各个进制

    %d 以有符号十进制打印

    %o 以八进制打印

    %x 以十六进制打印

    %u以无符号十进制表示

    %hd %hu短整形

%ld %lu长整型

%c 字符型打印操作

%f 单精度浮点型打印

%lf 双精度浮点型打印

%E %e 以科学计数法打印 如果e/E后的为正数则为指数 如果为-e 则为十分之一的方式

 

 

  1. 二进制数不能在C语言中出现
  2. 十进制小数转换成二进制数

    有几位小数就求出几位二进制

    每次乘以2

    如果个位有1就取出来

    如果个位为0也取出来

    然后正序排列

     

  1. 有符号型的数据,最高位为符号位

    数据在计算机中的存储方式

    原码:既是一个数的原始二进制码

    反码:如果是正数,原码与反码相同。如果是负数,最高位符号位不变,其余各位取反

    补码:如果是正数,补码与原码和反码都一致,如果是负数,是反码加1

     

    计算机中的计算:计算机中存储的是补码的形式,相加相减都是以补码的形式操作的,因为计算机只会做加法,一个正数和一个负数相加用两个数的补码直接相加就可以了。

    另一点:在反码中+0(0000 0000)和-0(1111 1111)两种表现形式 ,如果计算机采用补码方式存储救恩能够避免+0和-0 的两种不同值的bug,即+0(0000 0000)和-0(10000 0000)由于只用8位描述,最高位1丢弃,变为0000 0000

    1. 统一了0的编码 将-0的存储区间的最小值
    2. 符号位会参与计算
    3. 将所有减法变成加法运算
    4. 如果两个数相加会溢出最高位

       

      B的范围-128~127 对称下来是0~127和-1~-128两种

       

    例如:

    1. 59-47??

      59

      原码:0011 1011

      反码:0011 1011

      补码:0011 1011

      -47

      原码:1010 1111

      反码:1101 0000

      补码:1101 0001

      0011 1011 +

      1101 0001

      = 1 0000 1100 最高位溢出 符号位发生变化 结果变成整数 结果为12

      68 -72??

      原码:0100 0100

      反码:0100 0100

      补码:0100 0100

       

      原码:1100 1000

      反码:1011 0111

      补码:1011 1000

      0100 0100

      1011 1000

      1111 1100 补码

      1111 1011 反码

      1000 0100 -4

6.Sizeof 关键字

  1. Sizeof是一个运算符,也是关键字,不需要包含任何头文件。求出数据类型在内存中占的内存大小

    各数据类型所占内存大小

    (Char) 1B

    (short)2B

    (int)4B

    (long)4B (32位系统中占4个字节,64位操作系统中占8个字节)

    (long long) 8B

    (float)4B

     (double)8B

    

无符号数据

Unsigned 数据类型 变量名 值

最高位不再是符号位而是数字位

 

例如:有符号short 2B

0111 1111 1111 1111 32767 最大值

1111 1111 1111 1111 -32768最小值

 

 

7.ASCII 码表值

  1. 字符0    对应10进制数为48
  2. 字符a     对应10进制数为97
  3. 字符A     对应10进制数为65
  4. 字符' ' 对应10进制数为32

转义字符

转义字符

含义

ASCII码值(十进制)

\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

数字0

000

\ddd

8进制转义字符,d范围0~7

3位8进制

\xhh

16进制转义字符,h范围0~9,a~f,A~F

3位16进制

 

printf("%d\n", '\123');// '\123'为8进制转义字符,0123对应10进制数为83

printf("%d\n", '\x23');// '\x23'为16进制转义字符,0x23对应10进制数为35

 

数据类型

占用空间

取值范围

char

1字节

-128到 127(-27 ~ 27-1)

unsigned char

1字节

0 到 255(0 ~ 28-1)

数据类型

占用空间

有效数字范围

float

4字节

7位有效数字

double

8字节

15~16位有效数字

 

 

8.实数类型

float和double

  1. Double类型比float类型更精确
  2. 打印时如果只想要小数点后三位,增加 %.3f

 

9.字符和字符串的区别在于

    字符没有\0结尾

    字符串是以\0结尾 \0是隐藏起来的。

 

 

 

10.格式化输出

Printf("字符串");

    Printf("占位符");

printf格式字符:

打印格式

对应数据类型

含义

%d

int

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

%hd

short int

短整数

%hu

unsigned short

无符号短整数

%o

unsigned int

无符号8进制整数

%u

unsigned int

无符号10进制整数

%x,%X

unsigned int

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

%f

float

单精度浮点数

%lf

double

双精度浮点数

%e,%E

double

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

%c

char

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

%s

char *

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

%p

void *

以16进制形式输出指针

%%

%

输出一个百分号

 

printf附加格式:

字符

含义

l(字母l)

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

-

左对齐

m(代表一个整数)

数据最小宽度

0(数字0)

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

m.n(代表一个整数)

m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。

 

 

NULL 代表的是 (void*)0

 

练习:

计算如下程序结果

short a = 0xfffe; //0xfffe为补码

printf("%d\n", a); //结果为多少?

-2

 

unsignedshort a = 0xfffe;

printf("%u\n", a); //结果为多少?

65534

 

short a = 0x7fff + 2;

printf("%d\n", a); //结果为多少?

-32767

 

unsignedshort a = 0xffff + 5;

printf("%u\n", a); //结果为多少?

4

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值