计算机如何知道存储的数据是什么类型?

技术分享 · Fecmall · 于 6年前 发布 · 2838 次阅读

答案是计算机不知道。绝大多数的强类型设计语言,包括会保存运行时类型的语言(如C#/Java等),都是通过代码上下文来确定类型,并由编译器贯彻实施的。例如我们先假设a和b是整型的,编译器看到代码:a + b便会生成:add a, b这样的指令,将这两个变量的值相加。而如果a和b是字符串,编译器会将同样的代码编译成:string.Concat( a, b )这就是类型的奥秘,事实上计算机不知道这东西是什么类型,不同类型的变量产生了不同的行为完全是编译器在捣鬼。

计算机不知道。数据是程序员放的,指令是程序员调的。你往寄存器放了两个整数,然后调用一条浮点运算的指令,它就当你放的是浮点数。你叫他对条鱼执行飞,鱼就被扔出去飞了。

链接:https://www.zhihu.com/question/21634439/answer/18831221

共收到 1 条回复
Fecmall#16年前 0 个赞
package main
import (
 "fmt"
)

func main() {
        var i int8 = 100;
        var j int8 = 100;
        var k int8;
        k = i + j ;
        fmt.Println(k);
}

执行结果,不是 200,而是 -56 , 对于K这种需要计算动态执行时赋值,编译器就无法检查了,直接在机器上按照二进制的规则执行了,就像上面说的 你叫他对条鱼执行飞,鱼就被扔出去飞了。

按照二进制的计算方式,出来个-56

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics