标识符命名规则
标识符不能是关键字
标识符只能由字母、数字、下划线组成
第一个字符必须为字母或下划线
标识符中字母区分大小写
进制转换 (取反法)
将一个十进制数转成二进制 : 除二反序取余
将一个二进制数转成十进制 : 权值法
将一个八进制转化成二进制 : 将一个八进制看成三位二进制,不满足高位补0,从高位到低位一次连接
将一个十六进制转化成二进制 : 将一个十六 进制看成四位二进制,不满足高位补0,从高位到低位一次连接
十六进制转化成八进制 : 先将十六进制转二进制再转八进制
2 1993 ...1 1993 = 11111001001
2 996 ...0
2 498 ...0
2 249 ...1
2 124 ...0
2 62 ...0
2 31 ...1
2 15 ...1
2 7 ...1
2 3 ...1
2 1 ...1
8421法则:2进制 10进制
1000 -> 8
100 - > 4
10 - > 2
1 - > 1
在c语言中打印八进制,十进制,十六进制
int a = 0123; //八进制0
int b = 0xabc;//十六进制0x
int c = 123;//十进制
%o 将结果以无符号八进制形式输出
%x %X 将结果以无符号 十六进制 x输出小写 X输出大写
%d 将结果以有符号 十进制形式输出
%f 将结果以浮点形式输出 默认保留6位 %.3f保留小数点后面3位
%p 将一个变量的地址以十六进制的格式打印输出
%u 将一个结果以无符号十进制输出
%c 打印一个字符
%s 打印字符串(以‘\0’结尾)
数据存储原理
正数的原码,反码,补码都一样;
负数的反码是符号位不变,其余位取反、补码是符号位不变,其余位取反加一;
十进制数
|
原码
|
+15
|
0000 1111
|
-15
|
1000 1111
|
+0
|
0000 0000
|
-0
|
1000 0000
|
十进制数
|
反码
|
+15
|
0000 1111
|
-15
|
1111 0000
|
+0
|
0000 0000
|
-0
|
1111 1111
|
十进制数
|
补码
|
+15
|
0000 1111
|
-15
|
1111 0001
|
+0
|
0000 0000
|
-0
|
0000 0000
|
在计算机系统中,数值一律用补码来存储,主要原因:
1、统一了零的编码
2、将符号位和其它位统一处理
3、将减法运算转变为加法运算
4,两个补码表示的数相加,如果最高位(符号位)有进位,则进位被舍弃
sizeof关键字
1,计算数据类型大小,单位为字节;
2,sizeof的返回值位size_t;
3,size_t类型在32位操作系统下时unsigned int,是无符号的整数
数据类型在32位操作系统中内存占得字节大小(BYTE) 8bit = 1 Byte
char 字符型 1Byte (本质是一个字节的整型类型)
short 短整型 2Byte
int 整型 4Byte
long 长整型 4Byte
float 单精度浮点型 4Byte
double 双精度浮点型 8Byte
ASSIC 码
32 对应 空格
48 对应 0
65 对应 A
97 对应 a
溢出
有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失。
限定符
限定符
|
含义
|
extern
|
声明一个变量,extern声明的变量没有建立存储空间。
extern int a;//变量在定义时建立存储空间
|
const
| 定义一个常量,常量的值不能修改。
const int a = 10;
|
volatile
|
防止编译器优化代码
|
register
|
定义寄存器变量,提高效率。register是建议型的指令,而不是命令型的指令,如果CPU有空闲寄存器,那么register就生效,如果没有空闲寄存器,那么register无效。
|
printf函数
printf是输出一个字符串,putchar输出一个char。
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位。程序结果
|
#include <stdio.h>
int main()
{
int a = 100;
printf("a = %d\n", a);//格式化输出一个字符串
printf("address = %p\n", &a);//输出变量a在内存中的地址编号
printf("输出%%号:%%d\n");
char c = 'a';
putchar(c);//putchar只有一个参数,就是要输出的char
long a2 = 100;
printf("%ld, %lx, %lo\n", a2, a2, a2);
long long a3 = 1000;
printf("%lld, %llx, %llo\n", a3, a3, a3);
int abc = 10;
printf("设置位宽为6: abc = '%6d'\n", abc);
printf("设置位宽为6并且左对齐:abc = '%-6d'\n", abc);
printf("设置位宽为6以0补齐: abc = '%06d'\n", abc);
printf("abc = '%-06d'\n", abc);
double d = 12.3;
printf("设置位宽为10,精确到小数点后3位:d = \' %-10.3lf \'\n", d);
return 0;
}
结果: