Discuss / Java / 请教大家

请教大家

Topic source

412445773

#1 Created at ... [Delete] [Delete and Lock User]

"CPU原生提供的整型最大范围是64位"  是因为CPU是64位的么?

那么, 10年前的32位CPU原生提供的整型最大范围是32位么?

不懂, 请教大家,谢谢

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

整数范围是定死的,分别是1 / 2 / 4 / 8 /16 字节,分别是8 / 16 / 32 / 64 / 128 位

32位cpu可以处理64位整数,效率比较低而已,一个加法要拆成多条32位加法指令,64位cpu处理64位整数就是一条指令

412445773

#3 Created at ... [Delete] [Delete and Lock User]

关于32/64位计算机都可以处理64位整数.这点我明白了. 谢谢.

还有一个问题:

"整数范围是定死的", 这是一个计算机体系结构层面的限制么? 换一种问法, 这个规则是谁"定死"的?

感谢.

Boluxury

#4 Created at ... [Delete] [Delete and Lock User]

你去了解下计算机数字表示,最高位符号位,1的时候是负数,负数是用补码表示的,范围就确定了,你去看看吧

是JVM虚拟机定死了的,JVM虚拟机约定好int是32位,long是64位,然后在不同位数的计算机上,由JVM进行适配,这样程序员就无须关心底层,程序会按照JVM的约定运行,例如long类型在32位系统上,会被JVM拆分成多次进行计算,分别计算高32位和低32位。而像C/C++这种没有屏蔽计算机底层的语言,开发时就必须考虑不同计算机的位数问题,32位电脑上long类型是32位的,64位电脑上long类型是64位的,有时甚至会出现int类型和long类型范围一样的情况,需要在开发时格外注意

感谢JVM赐予我统一的环境,不用忍受不同底层、不同厂商编译器、甚至同一厂商编译器不同版本等等因素所带来的玄学bug,J门🙏🙏🙏🙏🙏

廖雪峰

#7 Created at ... [Delete] [Delete and Lock User]

你说的C/C++是历史问题,现在新的语言都定死了,不管是32/64还是未来128位计算机整数都定死了,比如Rust它规定的整型你一看就知道范围:u8,i16,u32,i64...


  • 1

Reply