计算机存储原理及C语言变量
计算机的基础当然是变量在其中的应用,这样会将计算过程变的简单,也会为每个计算的单元提供指向性,每种语言都离不开变量的帮忙。
计算机存储的原理
二进制、八进制、十六进制是计算机中常用的存储方式,其中多少进制就是逢多少进一位。
二进制:由0和1表示的数字,逢2进1.
八进制:由0-7表示的数字,逢8进1.
十六进制:由0-9和A-F,共16个数表示的数字,逢16进1.
英文占一个字节
目前,计算机的存储是以二进制为主的。通常,一个字节(byte)由8位构成(8bit),一个字节可存储的最大的量是(11111111)2=255。所以,26个英文字母的大小写(共52个)使用一个字节就能够完全表达。
中文占两个字节
对于中文而言,一个字节所能产生的255个数字,远少于中文的汉字数,所以计算机科学家们使用两个字节存储汉字,两个字节能存储(1111111111111111)2=65535个量,这就满足了汉语的要求。
综上,可以实现一下手动的计算功能了:
1 byte=8 bits
1Kb=1024 byte=210 bytes
1Gb=1024Mb=1024*1024Kb=10243 bytes
那么1Gb可以存储多少汉字呢?
计算方法为: 1Gb=10243/2,由此可见这是非常大的量。
C语言变量类型介绍
C语言的变量类型主要包括以下几个方面:
- 整数类型
- 实数类型
- 常量
- 字符串
整数类型
整数是正无穷到负无穷,但C中分为短整型(16位)
、普通整形(32位)
、长整型(64位)
。
使用下面例子测试:
#include <stdio.h>
void main(void)
{
int x=4294967296;
printf("%d\n",x);
}
编译不能通过,报错为:
In function ‘main’:
warning: overflow in implicit constant conversion [-Woverflow]
int x=4294967296;
发现上面的错误是溢出,无法实现输出的printf
功能,这也是符合计算机规则;删除末尾的数字6,程序运行正常,无错误。
** notes: 整数分为有符合和无符号,这个需要在仔细查看下。
实数类型
实数中包括浮点数、科学技术法等,科学技术法里面包含尾数、基数、指数。
浮点数分为单精度(float)和双精度(double),具体信息如下:
类型 | 存储字节 | 最小值 | 最大值 |
---|---|---|---|
float | 4位 | ~1.79e-308 | ~1.79e308 |
double | 8位 | ~3.4e-38 | ~3.4e38 |
字符类型
英文键盘上的符号均可以ASCII对应,ASCII码中对应的需要一个字节。使用关键字 char
来声明字符变量
char c="c";
printf("c=%d\n",c);
输出结果为:
c=99
** notes:字符型数据也存在正负,系统不同,出现的情况也可能不一样,有些系统为singed,有的则为unsigned。
常量
常量分为符号常量、直接常量和字符常量等,实际应用中,比如PI
值,,使用PI
则为符号常量,可以通过下面的方法进行定义:
#include <stdio.h>
#define PI 3.14 /* 这步是定义PI值为3.14,以便于进行下面的计算*/
void main(void)
{
float r=2.0;
float dd=2*PI*r;
printf("%.2f\n",dd);
}
编译运行,结果为12.56.
** notes: #define
后面不要添加分号,这是错误的做法。此外,常量符号一般选择使用的是大写的形式。
定义的变量
变量声明主要使用的是:
(1) int x1 x2;
(2) int x1,
x2;
(3) char ch;
(4) double d_yes;
变量是计算的开始,注意相同的变量名在使用的时候不要出现打错字的情况。
变量初始赋值
对于每个变量,只是声称还是不够的,这样并不会为它分配内存,只有赋值操作使这个变量有了初始值才能真正访问这个变量。比如int x=3
,具体的计算机的过程如下:
(1)分配变量名;
(2)为变量名分配字节块;
(3)关联内存块和变量名;
(4)运行这个语句,将初始值赋给这个变量。
同时检测了一下 &变量名
的输出什么?
#include <stdio.h>
void main(void)
{
int x=10;
printf("%d\n",&x);
}
输出为:571675020
这说明printf("%d\n",&x);
这个语句只是打印x的变量在内存的存储地址而已,并不是变量本身。可以使用scanf函数与&x
得到键盘输入的变量值,这个是需要进一步了解的。