devc出现不支持16位的错误_你可能不知道的计算机基础

1、C语言处理的数据形式

「常量」:在程序中不能改变其值的量「变量」:在程序执行过程中可以改变其值的量(先定义后使用)

「说明」:变量名标识了内存中特定的一块「内存单元」(图一)。而「内存是按字节进行编址的」,并且是用唯一的一个「十六进制无符号整数」来标识地址(通常所说的变量的地址指的是变量的「首地址」)

比如32位机的内存地址是32位,从0X00000000到0XFFFFFFFF

编译器按变量定义的「类型」分配相应大小的内存空间(图二)42873d058661dc730a14a2e3518b0361.png

2、高级语言为什么要区分数据类型?
  • 更有效的组织数据,规范数据的使用
  • 有助于提高数据的可读性,方便用户的使用
3、引入数据类型的好处?

数据类型可以明确告诉我们数据的取值范围,以及在该数据类型下可以进行哪些操作,这样可以防止许多不合法的错误

因为类型声明通常出现在程序可执行语句之前,所以编译器可以根据变量的类型来决定为变量分配多大的存储空间。这样在程序执行的时候,就有助于「提高程序的执行效率、节省内存空间」

4、变量类型决定了什么?
  • 占用内存空间的大小
  • 数据的存储形势
  • 合法的取值范围
  • 可参与的运算种类
5、宏常量

「宏常量」:用一个标识符号表示的常量「宏定义」:#define 标识符 字符串

宏常量的值是不区分数据类型的,都会当做字符串处理,因为这是一个「编译预处理指令」,不是语句,所以后边无分号。以#号开头,说明他是一个「编译预处理指令」

「编译预处理指令」:在源程序编译之前,先对程序中的编译预处理指令进行处理,然后将处理的结果和源程序一起进行编译,以得到目标代码

在预编译时,将程序中出现的宏名全部替换为对应字符串(宏替换)

如果在定义宏的时候,在后边加了分号

#define PI 3.14159;

那么在预编译时进行宏替换,会把分号也替换进去。由于宏替换是不进行语法检查的,因此程序在「编译」的时候就会出现语法错误,因为在不该出现分号的时候出现了分号

「编译器的主要任务之一就是对程序进行语法检查,但是编译预处理指令是在编译之前进行处理,它是不进行语法检查的」,也就是说,宏替换时,是不进行语法检查的。因此,类似上边的那种语法错误,只有在对宏替换之后的源程序进行编译时,才会被发现

6、宏常量存在的问题
  • 没有数据类型,编译器在进行宏替换时,不进行类型检查
  • 只进行简单的字符串替换,容易产生意想不到的错误
7、const常量

const常量必须在定义的时候赋初值。因为编译器是将const常量放在「只读存储区中」

为什么要把const常量放只读存储区?因为它是个常量,常量是不允许在程序中改变其值的,因此const常量只能在定义的时候赋初值

8、const常量优点
  • 有数据类型,编译器能对其进行类型检查
  • 某些集成化调试工具可以对const常量进行调试
9、为什么计算机用二进制而不是十进制来存储数据?

二进制只有0和1两个,它的每一位都可以用电子元件来实现,且运算规则简单,相应的运算电路也容易实现

10、二进制是如何表示负数的?

用二进制的「补码」来表示的

比如这里来表示-1的二进制(假设以16个数位来存储-1,「左侧最高位是符号位」,最高位为1,则表示负数,除了符号位,其它位表示数值部分)

「-1的原码」

1 0 00 00 00 00 00 00 01

对-1的原码进行「取反」(除符号位)(取反就是1变成0,0变成1)

「-1的反码」

1 1 11 11 11 11 11 11 10

在反码的基础上进行加1处理,就得到补码「-1的补码」

1 1 11 11 11 11 11 11 11(这就是-1的二进制形式)

这种有一位用来存储符号的就是有符号数,无符号数就是16全部用来存储数值

11、内存中是如何摆放数据的?

首先内存是一种存储单元的一维结构。通俗来说,内存就是一条单车道的马路,马路的宽度(也就是一维结构的宽度)就是1个字节,一个字节是8位,1位就是二进制的一个0或1

12、那么如何区分内存当中不同的位置?

方法就是给每个字节一个编号,也就是为每一个字节分配一个地址,通过这个地址就可以唯一的确定我需要访问的那个空间在内存当中的位置

13、什么是字和字长?

当我们查看自己电脑的基本信息的时候,会看见系统类型,比如是32位操作系统或64位操作系统

这个其实指的就是计算机的「字」「字长」的概念 在计算机中,「一串」数码是作为一个「整体」来处理或运算的,称为一个计算机字,简称「字」(word)。计算机存储一个字所需的字节长度,称为「字长」(word size)(注意:计算机并不是一个一个取的,而是把一串数码当做一个整体取出。计算机一次处理的位数越多,那计算机的运算速度就越快)

14、求余运算

11%5相信都知道是1,那么

11%(-5) = ?    (-11)%5 = ?
11%(-5) = 1   (-11)%5 = -1
2717c7ce392ed86d7c52daef2396deab.png

从上边可以看出来,余数的符号是和被除数的符号相同

15、求余运算的一个使用场景

将一个大范围的自然数集合映射到一个只有N个元素的小集合上

H(k) = k%p
  • 这个在哈希查找算法中可以用来构造哈希函数
  • 还可以用它来生成指定范围内的随机数

C语言提供的随机函数rand()可以生成一个0~32767之间的随机数。如果我们希望生成的随机数范围在1~100的随机数,那么就可以通过求余来处理

rand()%100

这会生成一个0~99之间的数,那么再加1,就会生成1~100的随机数。也就是

rand()%100+1

往期文章

操作系统基础(十五)---使用fork系统调用创建进程

干进程同步之共享内

时间复杂度和空间复杂度

IP协议详解

IT猿圈

不做开始爱好者

41b97e9a2bfcbc6347415a206ffb1112.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值