请问老师关于不同类型数据的问题

来源:2-4 指令入门(2)——寻址模式、浮点数和指令分类

Osuribaba

2020-05-23

比如有个 char 类型的 a,还有个 int 类型的 b,这俩在内存里存的都是二进制,那如果让这俩相加的话,cpu是咋知道这俩不能按照 int + int 处理而是得按照 char + int 处理呀?或者说我想问的是计算机是如何识别出不同类型比如整形、浮点、字符等,虽然说这些类型都是写代码的人定义的比如 int b = 666,这个 666 我知道存到了内存中,但是这个 int 我不太能想明白计算机是怎么处理的?
谢谢老师~

写回答

2回答

求老仙

2020-05-25

hello,cpu不知道类型。cpu只认识浮点型和整数。如果是浮点型,或整数运算。那么cpu设计了不同的指令。不存在类型转换,必须编译器搞定。另外,字符就是整数。

1
2
weixin_慕仙6522334
回复
Osuribaba
这个应该是jvm做的
2020-07-10
共2条回复

慕粉1538407886

2020-05-24

int 本身是高级语言出来的一个变量 你可以理解为对应的是一个类

然后 int  b = 6 =>  理解为实例化一个对象  名字是 b  数字是 6  类型int   

当你存取值的时候  就直接当 6 用

double c = 6.0  => 理解为实例化一个对像  名字是 c 值是6  类型是double

但是将它存入内存的时候 它会调用一个函数  就是对应老师讲的  -1^sin(n)*(1+xxx)*2(e-1024)

计算出它实际对应的一个二进制存起来

取的时候就对应的再算一波出来     

int 也好  double 也好 可能就是 对应的一个数字进行标识  01 -> int   02-> double

可能具体到汇编语言就是一个个函数 专门用来处理这些类型吧    

不同类型对应不同的函数  然后  名字呀  数值呀   类型呀  都会作为参数 传给这个函数

汇编本身不存在这些类型  也不存在  = 这种操作    汇编只有 load  store  和 计算  比较

所以这种  赋值也好  计算也好  最终都会转化为 一个个很沙雕的  指令  

一步步的 存起来  计算出来 

疯狂的在  cpu   内存  寄存器 中来回传递

我估摸着是这么回事 。。。。

1
1
Osuribaba
谢谢,其实我不太理解的地方就是在你说的“取的时候就对应的再算一波出来”这句话这儿,我想不通计算机是怎么知道这个取出来的二进制还要再进行一波计算然后转化成需要的类型的。 然后你说的汇编可能会有对应的函数去处理我觉得有道理,但是我想再确认一下~
2020-05-26
共1条回复

大学计算机必修课新讲--编译原理+操作系统+图形学

轻松超越大学课程,前阿里P8专家的实践精华总结

1752 学习 · 157 问题

查看课程