zoukankan      html  css  js  c++  java
  • 计算机一些基本进制单位及细节基础知识

    最基本单位 转换关系

    1Byte = 8 Bit

    1 KB = 1,024 Bytes

    1 MB = 1,024 KB

    1 GB = 1,024 MB

    1 TB = 1,024 GB

    1 PB = 1,024 TB

    1 EB = 1,024 PB

    1 ZB = 1,024 EB

    1 YB = 1,024 ZB

    PS:B即Byte,音译拜特,字节的意思,一般以字节作为计算机存储容量基本单位。1个字节是8个二进制位(8个二进制位组成1个字节),即1Byte=8bit(八个位的组合,共有256种电路状态。1个数字=1个英文字母(字符)=1字节(Byte),即一个标准英文字母就是一个字节,它有8个比特(bit),(如A为10D,用00001010来表示,8个二进制位)。1个汉字=2个字节,即一个标准汉字有2个字节,8个bit一个字节,也就是说在计算机里1个汉字要用16个bit来表示。另外中文标点符号占2个字节,英文标点符号(,.?!%&+-*/),占1个字节,中文省略号(……)和括(破折)号(——)各占4个字节。

    C语言中基本类型:

    32位编译器

    char :1个字节

    char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)

    short int : 2个字节

    int: 4个字节

    unsigned int : 4个字节

    float: 4个字节

    double: 8个字节

    long: 4个字节

    long long: 8个字节

    unsigned long: 4个字节

    64位编译器

    char :1个字节

    char*(即指针变量): 8个字节

    short int : 2个字节

    int: 4个字节

    unsigned int : 4个字节

    float: 4个字节

    double: 8个字节

    long: 8个字节

    long long: 8个字节

    unsigned long: 8个字节

    指针变量运算总结:

    对指针变量的引用包含两个方面:一是对指针变量本身的引用,如对指针变量进行的各种运算;二是利用指针来访问所指向变量,对指针的间接引用。

    1指针的赋值运算

    (1)将变量地址值赋给指针变量,使指针指向该变量。

    设有如下定义:

    int a,b,*pa,*pb;
    
    float *pf;

    第一行定义了整型变量a,b及指针变量pa,pb。pa、pb还没有被赋值,因此pa、pb没有指向任何变量,如图6.3(a)。下面的语句:

    a=12;b=18;
    
    pa=&a;
    
    pb=&b;

    第一行对a、b变量赋值,第二、三行分别将变量a、b的地址分别赋给指针变量pa、pb,使pa、pb分别指向了变量a与b。这样,变量a也可以表示为*pa,变量b亦可以表示为*pb。如图6.3(b)所示。

    (a)                                      (b)                                                             (c)

                                      图6.3指针地址赋值示意图

    (2)相同类型的指针变量间的赋值

    pa与pb都是整型指针变量,它们间可以相互赋值,如:pb=pa;是合法的,此时pa,pb都指向变量a,a、*pa、*pb是等价的。如图6.3(c)所示。

    注意:只有相同类型的指针变量才能相互赋值,如pf=pa;是不允许的。因为pa是整型指针,pf是浮点型指针。

    (3)给指针变量赋“空”值

    当指针变量刚定义时,它的值是不确定的,因而指向一个不确定的单元,若这时引用指针变量,可能产生不可预料的后果,破坏程序或数据。为了避免这些问题的产生,除了上面介绍的给指针变量赋以确定的地址值之外,亦可以给指针变量赋“空”值,说明该指针不指向任何变量。

    “空”指针值用NULL表示,NULL是在头文件stdio.h中预定义的常量,其值为0,在使用时应加上预定义行,如:

    #include "stdio.h"
    
    pa=NULL;

    亦可以用下面的语句给指针赋“空值”

    pa=0;

    pa='\0';

    这里指针pa并非指向0地址单元,而是具有一个确定的“空值”,表示pa不指向任何变量。

    注意:指针虽然可以赋值0,但却不能把其他的常量地址赋给指针。例如,即使你知道整型变量a的地址是4000,也不能使用下面的赋值语句:

    pa=4000;而只能:pa=&a;

    对全局指针变量与局部静态指针变量而言,在定义时若未被初始化,则编译系统自动初始化为空指针0。局部指针变量不会被自动初始化,因而指向不明确。

    例6.1从键盘上输入两个整数到a、b,按由大到小输出。

    #include <stdio.h>
    
    void main( )
    { 
         int a,b,*pa=&a,*pb=&b,*p; /*定义pa、pb,并初始化,如图6.4(a)所示*/
    
         scanf("%d%d",&a,&b);
         if(*pa<*pb)
         { 
                p=pa; /*进行指针交换,如图6.4(b),(c)所示*/
                pa=pb;
                pb=p;
         }
    
          printf("\n a=%d,b=%d\n",a,b);
          printf("\n max=%d,min=%d",*pa,*pb); /*pa指向大数,pb指向小数*/
    
    }

    若输入:12 22

    输出结果:a=12,b=22

    max=22,min=12

    例中一开始指针变量pa与pb被初始化,分别指向变量a与b,输出时约定pa指向大数,pb指向小数。比较a、b的大小,a小时则交换指针pa、pb,使pa指向大数b,pb指向小数a,从而达到题中要求。指针变化情况如图6.4所示。

    (a)                                           (b)                                  (c)

    图6.4指针的变化情况示意图

    2指针的算术运算

    一个指针可以加、减一个整数n,但其结果不是指针值直接加或减n,而是与指针所指对象的数据类型有关。指针变量的值(地址)应增加或减少“n×sizeof(指针类型)”。

    例如,有下列定义:

    int *p,a=2,b=4,c=6

    假设a,b,c三个变量被分配在一个连续的内存区,a的起始地址为4000;如图6.5(a)所示。

            (a)                                          (b)                                         (c)

    图6.5 指针移动示意图

    语句p=&a;表示p指向a变量,即p的内容是4000;如图6.5(b)。

    语句p=p+2;表示指针向下移两个整型变量的位置,p的值为4000+2×sizeof(int)=4000+2×2=4004,而不是4002,因为整型变量占两个字节,如图6.5(c)所示。

    我们可以直观的理解为:

    p=p+n表示p向高地址方向移动n个存储单元块(一个单元块是指指针所指变量所占存储空间)。

    p=p-n表示p向低地址方向移动n个存储单元块。

    p++,++p,是把当前指针p向高地址移动一个存储单元

    若p++作为操作数,则先引用p,再将p向高地址方向移动一个存储单元块,而++p是先移动指针后再引用p。

    p--,--p,当前指针p向低地址移动一个存储单元块。

    若p--作为操作数,则先引用p,再将p向低地址移动一个存储单元。而--p是先移动指针后再引用p。

    3指针的关系运算

    指针可以进行关系运算。在关系表达式中允许对两个指针进行所有的关系运算。若p,q是两个同类型的指针变量,则:p>q,p<q,p==q,p!=q,p>=q都是允许的。

    假设p、q是指向同一数组的两个指针,执行p>q的运算,其含义为,若表达式结果为真(非0值),则说明p所指元素在q所指元素之后。或者说q所指元素离数组第一个元素更近些。

    注意:在指针进行关系运算之前,指针必须指向确定的变量或存储区域,即指针有初始值;另外,只有相同类型的指针才能进行比较。

  • 相关阅读:
    文本框只能填数字
    Win7 IIS 配置错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的
    C#中小数点后保留两位小数,四舍五入的函数及使用方法(转)
    数据库中where与having区别
    NET Runtime version 2.0.50727.42
    C盘文件过大,C盘空间莫名丢失,pagefile.sys文件
    VS2008水晶报表变两页(重装系统后)
    win8 IIS配置
    从程序员到项目经理(5):程序员加油站 -- 懂电脑更要懂人脑
    从程序员到项目经理(4):程序员加油站 -- 不是人人都懂的学习要点
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2591745.html
Copyright © 2011-2022 走看看