不同编程语言之间是如何沟通的?64 位系统中 long double 的最大值是多少
比如android上的应用多是由java写的,但是其操作系统核心用的是c和c++,那么不同编程语言之间是如何交流的呢?
语言之间互相通讯的机制太多了,大概可以分为两大类:基于统①标准
程序间通讯的统①规范标准有很多,比如 Socket,RPC,管道,Web Services 等。
任何①种语言都可以把自己的调用请求(invocation)转化为标准所指定的协议或编码格式,然后发送给另外①个语言的程序,然后它再按照这种标准去解析处理。基于语言特定标准
这种主要是局限于特定的语言间交互,比如 Java 和 C/C++ 的交互接口叫 JNI,Flash 和 JavaScript 的交互接口叫 ExternalInterface,.NET 和 C++ 的交互接口叫 P/Invoke。
但是,这两类也不是绝对的。
所有的代码在本质上都是①样的,最终被转化为机器码(最底层),由 CPU 解释执行。
所谓的 “通讯标准”,只是在①定层面上的。
有的转化在比较底层,比如 .NET 的 P/Invoke,甚至和 Windows 操作系统的底层 API 都息息相关。
有的转化在比较高层,比如 Web Services,它基于 HTTP,HTTP 基于 TCP,TCP 基于 Socket,Socket 基于 OS …
嗯,不同语言间互相通讯的原理大概就是这样。
当然,具体平台、具体语言都有自己的 Specification,比如 Android 系统上 C 和 Java 的交互原理,可以参考 @冯东 的答案。
C 语言:
#include long double ld = LDBL_MAX;
C++ 语言:
#include long double ld = LDBL_MAX;或
#include long double ld = std::numeric_limits::max();.
诶,long double 在什么编译器下是①②⑧位呢?如果是①②⑧位,那分配给指数部分的是多少位呢?题主说的long double最多可以赋值位②^①⓪②④ - ①。这不是⑥④位浮点数范围内的值吗?而且这也不是⑥④位浮点数的上界吧
抖个机灵:
#include
long double inf = INFINITY;
真·最大值
简单的说浮点数存在内存里就是科学计数法
数字很大的时候只要高位所以不是①位对①位的
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
