专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

int类型是什么类型_java

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/7 1:04:29       共计:3599 浏览

int类型是什么类型?

首先,要知道一件事情:你在代码里写的事情,计算机未必会干。

比如:

没准人家编译器看你没有产生实际效用,就直接给砍了。

更严格来讲,你应当写:

这就有点实际意义了。

一直对基本类型的cast疑惑不解

C的基本类型,大都能对应到CPU能处理的标准数字类型。char基本都是一个8位有符号整数,最高位是符号位。int是不低于16位的有符号整数(所有的常见平台上都是32位),最高位是符号位。

那么进行这种转换,基本上就是编译器把这件事情翻译成一个或者几个CPU指令,大概是:

从地址var1读内容到寄存器;执行8位到32位的有符号整数转换;将结果从寄存器写到地址var2,写32位。

对于ASCII,a的数值是97,用八位的二进制数表示,就是01100001。把它转换到int,实际上就是在求一个32位有符号的值,数值意义和01100001要相等。编译器会把你这个表达式翻译成对应的CPU操作。结果是00000000 00000000 00000000 01100001。

看起来好像除了填上一堆零,啥都没干?

实际上填零是重要操作,因为内存空间可以是脏的:在你给丫赋值之前,丫可能还带着上次计算完之后的垃圾。

而且,如果是负数,就会很不一样。比如:

由于现代计算机几乎全都用补码来表示负数,于是负一的8位二进制表示,是11111111;而32位表示,则是11111111 11111111 11111111 11111111。不难看到,对于有符号数的长度转换,并不总是填零的。

所以CPU在这里面,还是需要做一些微小的工作。

======================

补充运行时类型的问题:

C这种语言,要的就是运行时不带类型记号的裸奔快感。比如对于类似这样的源代码:

最后的那个相加,在不优化的情况下,通常会产生类似这样的几个指令:

从地址a取32位数据到寄存器1;从地址b取32位数据到寄存器2;执行32位整形加法;将32位数据写到地址c;

可以看到,这里面没有类型。对数据的操作方式就是类型。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:如何发展自己的副业呢_java | ·下一条:你曾经为哪些游戏疯狂过_java

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有