请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

2回答

求老仙 2020-05-25 18:27:26

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

1 回复 有任何疑惑可以回复我~
  • 提问者 Osuribaba #1
    请问老师,假设有个char字符的‘a’,对应ascii码的97,如果采用UTF8的方式存在内存中的话,那这个a对应的二进制就是0110 0001,那cpu在把这个0110 0001取出来的时候,是经过什么样的过程才转化成字符的‘a’的呀?
    回复 有任何疑惑可以回复我~ 2020-05-26 12:20:08
  • weixin_慕仙6522334 回复 提问者 Osuribaba #2
    这个应该是jvm做的
    回复 有任何疑惑可以回复我~ 2020-07-10 02:43:33
慕粉1538407886 2020-05-24 20:25:45

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 回复 有任何疑惑可以回复我~
  • 提问者 Osuribaba #1
    谢谢,其实我不太理解的地方就是在你说的“取的时候就对应的再算一波出来”这句话这儿,我想不通计算机是怎么知道这个取出来的二进制还要再进行一波计算然后转化成需要的类型的。
    然后你说的汇编可能会有对应的函数去处理我觉得有道理,但是我想再确认一下~
    回复 有任何疑惑可以回复我~ 2020-05-26 12:08:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信