C语言基础知识-数据类型
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.常量与变量
1>.关键字
C的关键字共有32个。
1>.数据类型关键字(12个) char,short,int,long,float,double,unsigned,signed,struct,union,enum,viod
2>.控制语句关键字(12个)
if,else,switch,case,default,for,do,while,break,contiue,goto,return 3>.存储类型关键字(5个)
auto,extern,register,static,const 4>.其他关键字(3个)
sizeof,typedef,volatile
2>.数据类型
数据类型的作用:编译器预算对象(变量)分配的内存空间大小。
1>.数据类型的定义
变量的定义:
数据类型 变量名[也叫标识符],如:"char Habby;"
变量的赋值:
变量名 = 值,如:“NAME=Jason Yin;”
数据类型 变量名称[标识符] = 值,如:"int AGE = 10;"
2>.标识符的命名规则
字母,数字,下划线组成;
不能以数字开头(第一个字符必须为字母或下划线);
见名知意;
不能和同一函数内其他标识符重复;
不能使用C语言内置的关键字;
标识符中字母区分大小写;
3>.常量
常量的作用: 在程序运行过程中,其值不能被改变的量; 常量一般出现在表达式或赋值语句中; 举几个例子: 整型常量 : 100,200,-100,0 等 实型常量 : 3.14,9.18,1.44 等 字符型常量 : 'a','b','10','\n' 字符串常量 : "age","123","jason" 常量的定义: const 数据类型 常量名; #deifne 常量名 值 注意: 通过“#deifne”定义的常量是根据值来匹配数据类型的,推荐使用这种方式定义常量。 const修饰的常量是不安全的,可以通过指针来修改
4>.变量
变量的作用:
在程序运行过程中,其值可以改变;
变量在使用前必须先定义,定义变量前必须有相应的数据类型;
变量特点:
变量在编译时为其分配相应的内存空间;
可以通过其名称和地址访问相应内存;
5>.使用案例
[[email protected] /yinzhengjie/code/day002]# cat variable_definitions.c /* @author :yinzhengjie blog:http://www.cnblogs.com/yinzhengjie EMAIL:[email protected] */ #include <stdio.h> #define PI 3.1415926 int main(void) { //定义变量 int _age = 18; printf("Age={%d}\n",_age); //定义常量 const int MONTH = 12; printf("一年有{%d}个月\n",MONTH); //引用使用"#define"定义的变量 printf("圆周率为:{%f}\n",PI); } [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# gcc -o variable_definitions variable_definitions.c [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# ./variable_definitions Age={18} 一年有{12}个月 圆周率为:{3.141593} [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]#
二.进制
进制也就是进制位,是人们规定的一种进位方法。对于任何一种进制-X进制,就表示某一位置的数运算时逢x进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,依次类推,x进制就是逢x进位。
1>.二进制
二进制逢2进1,所有的数都是由0,1组成,如11+1=100。
十进制转二进制:
除二反序取余法(将十进制数每次除以2,取出余数,按照结果倒叙排序)。
二进制专十进制:
权值法(将二进制各个位数从0位开始乘以2的N次幂,将各个位数的结果相加)。
2>.八进制
八进制逢8进1,所有的数字是0到7组成。
十进制转八进制:
除八反序取余法(将十进制数每次除以8,取出余数,按照结果倒叙排序)。
二进制转化为八进制:
将二进制数字从右到左,每3个二进制数划分为一组,将每组数据的二进制转换成八进制对应的数字即可。
八进制转换为二进制:
八四二一法则(将八进制的每一个位数上的数字拆开,分别用二进制表示即可。)
3>.十六进制
十六进制逢16(F)进1,由数字0-9和字母A-F组成。 十进制转化为十六进制 除十六反序取余法(将十进制数每次除以16,取出余数,按照结果倒叙排序,需要注意的是大于10的数字应该由A-F来表示) 十六进制转化为十进制 权值法(将二进制各个位数从0位开始乘以16的N次幂,将各个位数的结果相加)。 十六进制转换为二进制 八四二一法则(将十六进制的每一个位数上的数字拆开,分别用二进制表示即可。) 二进制转换为十六进制 将二进制数字从右到左,每4个二进制数划分为一组,将每组数据的二进制转换成八进制对应的数字即可。
十六进制转换为八进制
思路就是先将十六进制转换成二进制,再将二进制转换成八进制。
八进制转换成十六进制
思路就是先将八进制换转成二进制,再将二进制转换成十六进制。
4>.进制转换表
5>.在C程序中进制打印案例
[[email protected] /yinzhengjie/code/day002]# cat binary_conversion.c /* @author :yinzhengjie blog:http://www.cnblogs.com/yinzhengjie EMAIL:[email protected] */ #include <stdio.h> int main(void) { //十进制数字10 int a = 10; printf("%d\n",a); //定义八进制 int b = 010; printf("%d\n",b); //定义十六进制 int c = 0x10; printf("%d\n",c); return 0; } [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# gcc -o binary_conversion binary_conversion.c [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# ./binary_conversion 10 8 16 [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]#
[[email protected] /yinzhengjie/code/day002]# cat binary_conversion.c /* @author :yinzhengjie blog:http://www.cnblogs.com/yinzhengjie EMAIL:[email protected] */ #include <stdio.h> int main(void) { //十进制数字10 int a = 10; printf("%o\n",a); //定义八进制 int b = 010; printf("%o\n",b); //定义十六进制 int c = 0x10; printf("%o\n",c); return 0; } [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# gcc -o binary_conversion binary_conversion.c [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# ./binary_conversion 12 10 20 [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]#
[[email protected] /yinzhengjie/code/day002]# cat binary_conversion.c /* @author :yinzhengjie blog:http://www.cnblogs.com/yinzhengjie EMAIL:[email protected] */ #include <stdio.h> int main(void) { //十进制数字10 int a = 10; printf("%x\n",a); //定义八进制 int b = 010; printf("%x\n",b); //定义十六进制 int c = 0x10; printf("%x\n",c); return 0; } [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# gcc -o binary_conversion binary_conversion.c [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# ./binary_conversion a 8 10 [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]#
[[email protected] /yinzhengjie/code/day002]# cat binary_conversion.c /* @author :yinzhengjie blog:http://www.cnblogs.com/yinzhengjie EMAIL:[email protected] */ #include <stdio.h> int main(void) { //十进制数字10 int a = 10; printf("%X\n",a); //定义八进制 int b = 010; printf("%X\n",b); //定义十六进制 int c = 0x10; printf("%X\n",c); return 0; } [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# gcc -o binary_conversion binary_conversion.c [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]# ./binary_conversion A 8 10 [[email protected] /yinzhengjie/code/day002]# [[email protected] /yinzhengjie/code/day002]#
三.计算机内存数值存储方式
1>.原码
一个数的原码(原始的二进制码)有如下特点: 最高位作为符号位,0表示正,1表示负; 其它数值部分都是数值本身绝对值的二进制数; 负数的原码是在其绝对值的基础上,最高位变为1; 举个例子,我们用一个字节的原码来表示+15,-15,+0,-0 +15 : 0000 1111 -15 : 1000 1111 +0 : 0000 0000 -0 : 1000 0000 原码表示方法简单易懂,带有符号数本身转换方便,只要符号还原即可,但当两个整数相减或不同符号相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。
2>.反码
3>.补码
4>.补码的意义
四.
五.