C语言基础知识-数据类型

            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.149.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    #以八进制方式显示
[[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    #以十六进制方式显示
[[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    #以十六进制方式显示

三.计算机内存数值存储方式

1>.原码

一个数的原码(原始的二进制码)有如下特点:
    最高位作为符号位,0表示正,1表示负;
    其它数值部分都是数值本身绝对值的二进制数;
    负数的原码是在其绝对值的基础上,最高位变为1;

举个例子,我们用一个字节的原码来表示+15,-15,+0,-0
    +150000 1111
    -151000 1111
    +00000 0000
    -01000 0000

    原码表示方法简单易懂,带有符号数本身转换方便,只要符号还原即可,但当两个整数相减或不同符号相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。

2>.反码

3>.补码

4>.补码的意义

四.

五.

猜你喜欢

转载自www.cnblogs.com/yinzhengjie/p/10941577.html