C- 进制转换
1. 计算机需要处理数据
2.数据需要保存在存储器上
3. 计算机只能识别0或者1的二进制数据
4.我们看到的,用到的所有数据在计算机中都是以二进制存储的
5.内存中的相同的01二进制数据,以不同的编码,可以有不同的展现形式
6. 十进制整数与二进制、八进制、十六进制相互转换
十进制转其他进制,取余法
二进制转八进制,每三位二进制转换为一位八进制
二进制转十六进制,每四位二进制转为一位十六进制
7. 原码、反码和补码的表示形式
在计算机中,数值以补码的形式存储的
正数的原码、反码、补码都一样,
负数的原码,最高位是符号位,其他位是数据位
负数的反码,符号位不变,其他位依次取反
负数的补码,是反码加1
8. 变量的定义
定义一个变量,需要告诉计算机,该变量的类型、变量名,可以同时告诉计算机该变量的初始值是多少。
变量的类型,决定了变量的存储方式,变量的长度(变量的取值范围),变量所能进行的操作
无符号整数,最高位就是数值位,
有符号整数,最高位就是符号位,
变量名来标识这块存储空间,用户通过变量名来访问这个变量
给变量赋值,实际上就是把这个值放到变量名所标识的存储空间中
int a = 5;
9.整型变量
short / int / long / long long这几种类型,这是有符号的类型
可以用unsigned来修饰这几种类型,变成无符号的数据类型,即第一位是数值位,而不是符号位
short -32768~32767
unsigned short 0~65535
需要特别注意的是,在计算机中,不看你怎么存,只看你怎么读,如:
unsigned short b1 ; //系统会在内存中给b1变量开辟两个字节的存储空间
b1 = -10; //把-10存储到b1 这块存储空间中
// -10补码 , 原码:1000 0000 0000 1010
// 反码:1111 1111 1111 0101
// 补码:1111 1111 1111 0110
所以,在b1变量中存储的 内容 就是 1111 1111 1111 0110
//在计算机中,不看你怎么存,只看你怎么读
因为,b1的数据类型是unsigned short, 如果把b1中的内容按%d的形式输出的话,原来最高位1就不再是符号位,而是数值位了,所以把1111 1111 1111 0110转换为十进制数就是 65526
printf("%d\n", b1); // 65526
printf("%x\n", b1);
short b2 = b1; //如果定义一个有符号的变量b2,把b1变量中的值,即 1111 1111 1111 0110赋值给b2后, 这一串二进制的最高位1,又变成符号位了,表示负数, 1111 1111 1111 0110的补码转换为十进制就是-10
printf("%d\n", b2); //-10
10. 小数
在C语言中,小数分为float 和 double两种类型,区别在于所占字节数不同,表示的数据范围和精度也不同。
float 占4字节, 有7位有效数字
double 占8字节,有15位有效数字
11. 字符型数据
用单引号引起来的单个字符
char c1 = ‘a’;
//定义一个字符型变量,变量名是c1, 存储的值是该字符对应的ASCII码值
//在ASCII这种编码格式下, 小写字母a对应的编码是 数字97,其二进制形式为 0110 0001
// 大写字母A,对应的ASCII编码是 65,二进制形式为:0100 0001
printf("%c \n", c1); //如果按%c的形式输出,就输出对应的字母
printf("%d\n", c1); //如果按%d的形式输出,就输出对应的十进制数
转义字符
\n 回车换行
\t tab键
\\ \
\” ”
\’ ’
12. 一个长整型数据可以赋值给短整形数据,但是,高位会被扔掉,只保留相应的低位数据,
13.格式化输入与输出
//printf()函数可以按指定的格式输出内容
//\n是一个转义字符,表示回车换行
printf("%D\n", 123); //%d就是格式符,表示以十进制整数输出
printf("%O\n", 123); //%o就是格式符,表示以八进制整数输出
printf("%x\n", 123); //%x就是格式符,表示以十六进制整数输出
printf("%f\n", 12345.67898765); //按%f输出小数,默认有6位小数
printf("%lf\n", 12345.67898765); //%lf输出是double类型数据
printf("我有%d个苹果\n", 200); //格式串中除了格式符用后面的数据来代替外,其他的字符按原样输出
printf("abc%8dgh\n", 123); //指定输出的宽度,默认右对齐
printf("abc%-8dgh\n", 123); //在宽度前加一个负号,表示左对齐
printf("%.2f\n", 123.45678); //.2表示有两位小数
printf("%4.2f\n", 123.45678); //如果指定的宽度小于数值长度,按实际长度输出
printf("%8.2f\n", 123.45678);
printf("%c\n", 'A'); //字符型数据按%c输出一个字符
printf("%d\n", 'A'); //字符型数据按%d输出对应的ASCII值
格式输入
// //scanf()函数可以从键盘上接收输入
// int i ;
// printf("请输入一个整数:");
// scanf("%d", &i); //从键盘上接收数据保存到变量i中, &这个符号叫取地址符, &i表示变量i的地址
// //在键盘上输入数据后,按回车键表示输入完成
// printf("你输入的数为%d\n", i);
//
// //缓冲区 12回车
// char xxx;
// scanf("%c", &xxx);
//
// char c ;
// printf("请输入一个字符:");
// scanf("%c", &c);
// printf("你输入的字符为%c\n", c );
//
//
// int d ;
// printf("请输入一个小数:");
// scanf("%d", &d);
// printf("你输入的数为%d\n", d );
//