三、数据溢出,(二/八/十/十六)进制之间的转换,常量、变量。
1.数据溢出:
数据溢出遵从圆形法则。
例如: unsigned char a = 300;//300已经超出'a'的取值范围,a里面存储的数据实际是44 //44 = (300%256); unsigned char a = -10; //-10已经超出'a'的取值范围,a里面存储的数据实际是246 //246 = (256-10)
2.进制之间的转换:
①二进制转换为(八/十/十六)进制 (二进制由0/1组成)
1)假设有二进制数 001101010110 //421 421 421 421 二进制转八进制:将二进制数三个三个分开--》001 101 010 110 将二进制数计算后转化 --》 1 5 2 6 由此可得二进制数001101010110转换成八进制数为1526; 2)假设有二进制数 0111 二进制转十进制:1*2^0 + 1*2^1 + 1*2^2 + 0*2^3 = 1+2+4+0 = 7; 3)假设有二进制数 001101010110 //8421 8421 8421 二进制转十六进制:将其四个四个分开: 0011 0101 0110 计算后转换 --》 3 5 6 由此可得二进制数001101010110转换成十六进制数为356;
②八进制转换为(二/十/十六)进制 (八进制由0~7组成)
1)假设有八进制数 0237 八进制转二进制:将八进制数一个个拆开--》 2 3 7 转化为二进制--》 010 011 111 由此可得八进制数0237转换成二进制数为 010011111; 2)假设有八进制数 0237 八进制转十进制:7*8^0 + 3*8^1 + 2*8^2 + 0*8^3 = 7+24+128+0 = 159; 3)假设有八进制数 0237 八进制转十六进制:先将八进制数转成二进制数 将八进制数一个个拆开--》 2 3 7 转化为二进制--》 010 011 111 //8421 8421 再转化为十六进制--》 1001 1111 --》9F; //十六进制转八进制方法相同!!!
③十进制转换为(二/八/十六)进制 (十进制由0~9组成)
1)假设有十进制数100 十进制转八进制:将十进制数100一直除八取余--》100/8=12---4; 12/8 =1----4; //从下往上读余数,就是 1/8 =0----1; //转换出来的八进制数; 0/8 =0----0; 由此可得十进制数100转化成八进制数为0144; 2)假设有十进制数10 十进制转二进制:二分法 --》10/2=5---0; 5/2=2----1; //从下往上读余数,就是 2/2=1----0; //转换出来的二进制数; 1/2=0----1; 由此可得十进制数10转化成二进制数为1010; 3)假设有十进制数100 十进制转十六进制:将十进制数100一直除十六取余--》100/16=6---4;//从下往上读余数,就是 6/16 =0---6;//转换出来的十六进制数; 0/16 =0---0; 由此可得十进制数100转化成十六进制数为064;
④十六进制转换为(二/十)进制 (十六进制由0~F组成)
1)假设有十六进制数0x64 十六进制转二进制:将十六进制数64拆开 --》 6 4; 转化为二进制--》 0110 0100; //8421 8421 由此可得十六进制数64转化成二进制数为01100100; 2)假设有十六进制0x64 十六进制转十进制:4*16^0 + 6*16^1 = 4 + 96 = 100;
3.常量和变量:
①. 常量:常量就是不能被赋值的量。
例如:1,10,3.14,'a', ' A' '你好', ‘HELLO’...等
其中,‘A’ == 65 ,字符的本质就是一个整数,是常量;
”HELLO“,字符串是由多个字符组成的,所以也是常量。
注意:”HELLO“中一共有6个字节(H,E,L,L,O,\0);每个字符串后面都会有一个隐藏的字符‘\0’,表示字符串结束。
②. 计算字符串长度的方式。
1)sizeof (”字符串/关键字(包括‘\0’)“)
例如:sizeof("hello") ==6。
2)strlen(”字符串“),只会计算字符串的有效数据(不包括‘\0’);
例如 strlen(”hello world“)==11。
注意:使用strlen时,要添加头文件string.h。
③. 零值
int 0;
float 0.0;
char '\0'
指针 NULL 或者(void*)0x0。
④. 变量:变量就是可赋值的量。
1)使用变量前要先定义
2)定义变量的本质
例如: int a=100; 表示: //系统分配了4个字节内存(sizeof(int)),并把其命名为a, //把100转换成二进制数储存到a这块内存中。 char b='c';表示: //系统分配了1个字节内存(sizeof(char)),并把其命名为b, //把字符'c'的ASCII码值转化为二进制储存到b这块内存中。
3)如何定义一个变量
数据类型 + 变量名 例如: int a char b
4)变量名命名规则
1.由数字、字母和下划线组成; 2.必须是字母或下划线开头; 3.不能以C语言中的关键字来命名; 4.取变量名时,尽量取一些有意义的名字,一看到变量名就知道这个变量表示什么。 5.C语言中的关键字如下: while for if else do switch default case break continue goto return char short int long double float void unsigned signed struct union enum register const volatile auto static extern typedef sizeof。 注意:当变量名与函数名冲突时,函数就不能再使用了!!!