Day04_数据类型占位符使用及进制转换

2013年10月09日 星期三 10时03分51秒

回顾:
 1.变量
 2.scanf标准函数

字符类型是一种数据类型
在C语言程序中字符类型用char表示
字符类型中包含了256个不同的字符,例如'a','+','~'  ...
字符类型中的所有字符在计算机中都是使用数字表示的
ASCII码表描述了字符和数字之间的对应关系
'a' -- 97
'A' -- 65
'0'     -- 48 (字符0,不是数字0)

256个字符分成两组,每组128个,其中一组包含所有常见字符,这些字符对应的整数位于0到127之间
这组字符和整数之间的对应关系在所有计算机上都一样

另外一组字符和整数之间的对应关系在不同的环境下是不同的;这组字符对应的数字范围是从 -1 到 -128 或者 128 到255

字符类型数字一般不要当整数使用

无符号字符类型和字符类型所包含的字符是一样的,但是他们所对应的整数范围是固定的(0到255)
无符号类型使用 unsigned char 来表示

ASCII码表中所有小写英文字母字符和大写英文字母字符以及阿拉伯数字字符都是连续的

't' - 'a'  等于   'T' - 'A'
'd' - 'a'  等于   '3' - '0'

'\n' 换行字符
'\r' 回车字符    (printf语句中会把\r之前内容覆盖掉)
'\t' 制表符
'\\' 代表\
'\'' 代表'
'\"' 代表"

短整数类型是一种数据类型
短整数类型用short表示
短整数类型一共包含65536个不同的整数数字
这些整数的范围是从 -32768 到 32767

无符号短整数类型也是一种数据类型
无符号短整数使用 unsigned short表示
无符号短整数同样包含65536个不同的整数,范围是0到65535

长整数也是一种数据类型
长整数用long int 或者long 表示
这个数据类型包含2的32次方个不同的整数
这些整数的范围是从 -2的31次方 到 2的31次方减一

无符号长整数类型也是一种数据类型
无符号长整数类型用unsigned long或者unsigned long int表示
无符号长整数的数字范围是从 0 开始 到 2的32次方减一 为止

整数类型在我们的计算机环境中和长整数类型一致
整数类型使用int表示
无符号整数类型用 unsigned int 表示

所有整数类型之间是互相重叠的
所能表示的数字范围逐级扩大

C语言中可以使用两种数据类型表示带小数点的数字
单精度浮点数类型用float表示
双精度浮点数类型用double表示
单精度浮点类型所能表示的精度范围低

程序中所有不带小数点的数字自动被当成int类型数字处理
如果希望在程序中使用无符号整数类型的数字则需要在数字后面加u,例如:3u;

程序中所有带小数点的数字自动被当成double类型数字处理
如果希望在程序中使用float类型的数字则需要在数字后加f,例如:2.3f

---------------------占位符列表-------------------------
char  -- %c 或 %hhd
(%c打印字符身份,%hhd打印数字身份)
unsigned char -- %c 或 %hhu
short  -- %hd
unsigned short -- %hu
long  -- %ld
unsigned long -- %lu
int  -- %d
unsigned int -- %u
float  -- %f 或 %g
double  -- %lf 或 %lg
(%g和%lg不会保留小数点后面无效的0,%f和%lf会保留)

%nd可以规定打印结果占n个位置,没有数字的位置用空格填充
%-nd同样可以规定打印结果所占的位置数量,负号表示有效内容靠左显示
%0nd同样可以规定打印结果所占的位置数量,0表示无效位置用0填充
%n.mf做占位符同样可以打印浮点数,其中n表示打印结果一共占多少位置,m表示小数点后面占多少位置
--------------------------------------------------------
计算机内存被划分成多个同样大小的格子,每个格子叫做一个字节
每个变量一定是多个连续字节存储的
计算机为每个字节分配了一个编号(地址),不同字节的编号一定不同
地址从0开始递增

变量的地址是存储它的那些字节中地址最小的字节的地址
所有数据或者变量所占据的字节数必须是2的整数次方;

sizeof关键字可以用来计算某个数据类型或者某个变量所占的空间字节数;

各种数据类型的大小
char(unsigned char) 1个字节
short(unsigned short) 2个字节
long(unsigned long) 4个字节
int(unsigned int) 4个字节
float   4个字节
double   8个字节

sizeof关键字的小括号中对变量所做的修改不会真正生效
--------------------------------------------------------
通常表示数字的方式叫做十进制
每个数位上有10种不同的状态

计算机中使用二进制表示数字
二进制中每个数位上只有两种不同的状态(分别使用0和1表示)

二进制和十进制都是一种表示数字的方式
任何数字既可以用十进制表示,也可以用二进制表示

二进制数字中每个数位都有编号,最右边的数位编号为0,向左依次递增
二进制数字中每个数位上的1相当于2的位数次方

二进制数字转换十进制时可以把每个数位上的1单独转换,然后把转换结果求和
0011 0101 = 32 + 16 + 4 + 1=53
十进制数字转换二进制
51= 32 + 16 + 2 + 1
0010 0000  32
0001 0000  16
0000 0010    2
0000 0001    1
0011 0011  51
---------------------练习-------------------------------
73 = 64 + 8 + 1
0100 1001
111 = 64 + 32 + 8 + 4 + 2 + 1
0110 1111 
105 = 64 + 32 + 8 + 1
0110 1001
200= 128 + 64 + 8
1100 1000
234= 128 + 64 + 32 + 8 + 2
1110 1010
------------------十进制转换二进制----------------------
  5 #include <stdio.h>
  6
  7 int main()
  8 {
  9         int num=0;
 10         printf("请输入一个0~255的数字:");
 11         scanf("%d",&num);
 12         printf("%d",num / 128);
 13         num=num % 128;
 14         printf("%d",num / 64);
 15         num=num % 64;
 16         printf("%d",num / 32);
 17         num=num % 32;
 18         printf("%d ",num / 16);
 19         num=num % 16;
 20         printf("%d",num / 8);
 21         num=num % 8;
 22         printf("%d",num / 4);
 23         num=num % 4;
 24         printf("%d",num / 2);
 25         num=num % 2;
 26         printf("%d\n",num / 1);
 27         num=num % 1;
 28
 29 }
--------------------------------------------------------
除以2取余倒着写
**** ***1 173
0*** ***0 86
00** ***1 43
000* ***1 21
0000 ***0 10
0000 0**1 5
0000 00*0 2
0000 0001 1
--------------------------------------------------------
通过上面的方法计算得出的二进制数字叫做原码
计算机中使用补码记录数字
所有非负数的原码和补码一样

内存中每个字节对应八个二进制位

八进制和十六进制是两种二进制的简化写法

1100 0110 = 11 000 110
   = 306   八进制
C语言程序中可以直接使用八进制形式表示数字,必须在前边加一个0
%o 做占位符可以把数字的八进制表现形式打印在屏幕上

1100 0110 =C6    十六进制
十六进制中每个数位上用0到9以及a到f来表示

C语言程序中可以直接使用十六进制表示数字,必须在前边加上0x;

程序中直接使用十六进制方式表示的数字计算机自动把它当成无符号整数类型看待

%x或%X做占位符可以把数字的十六进制表现形式打印在屏幕上
--------------------------------------------------------
补充:
    '\r' 回车字符
    例:
    printf("*******%d\r",1);
    printf("******%d\r\n",2);
    则输出结果为:
    ******21
    也就是说 ‘\r’ 会在输出的时候把光标重新定位到第一位
    也就是覆盖前面的内容;
    例:
    printf("123456789\r");
    printf("000\r\n");
    则输出结果为:
    000456789
    ~!注意:\r必须与\n必须一起使用,否则输出为空
--------------------------------------------------------

预习:
 1.负数的二进制补码计算
 2.C语言中的操作符
 
作业:
 1.编写程序按照除以2取余倒着写的方式计算用户给定数字的二进制并打印在屏幕上(规定输入数字范围0~255之间)
 2.编程把用户给定的秒数转换成如下格式
 hh : mm : ss








 

posted on 2013-10-11 14:14  我的小人生  阅读(419)  评论(0编辑  收藏  举报