采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
比如有个 char 类型的 a,还有个 int 类型的 b,这俩在内存里存的都是二进制,那如果让这俩相加的话,cpu是咋知道这俩不能按照 int + int 处理而是得按照 char + int 处理呀?或者说我想问的是计算机是如何识别出不同类型比如整形、浮点、字符等,虽然说这些类型都是写代码的人定义的比如 int b = 666,这个 666 我知道存到了内存中,但是这个 int 我不太能想明白计算机是怎么处理的? 谢谢老师~
hello,cpu不知道类型。cpu只认识浮点型和整数。如果是浮点型,或整数运算。那么cpu设计了不同的指令。不存在类型转换,必须编译器搞定。另外,字符就是整数。
请问老师,假设有个char字符的‘a’,对应ascii码的97,如果采用UTF8的方式存在内存中的话,那这个a对应的二进制就是0110 0001,那cpu在把这个0110 0001取出来的时候,是经过什么样的过程才转化成字符的‘a’的呀?
这个应该是jvm做的
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 内存 寄存器 中来回传递
我估摸着是这么回事 。。。。
谢谢,其实我不太理解的地方就是在你说的“取的时候就对应的再算一波出来”这句话这儿,我想不通计算机是怎么知道这个取出来的二进制还要再进行一波计算然后转化成需要的类型的。 然后你说的汇编可能会有对应的函数去处理我觉得有道理,但是我想再确认一下~
登录后可查看更多问答,登录/注册
轻松超越大学课程,前阿里P8专家的实践精华总结
947 13
1.2k 12
992 7
811 5
1.2k 5