JS带我探究计算机原理 - int型的内存表示

2020-02-15

学习 C++ 变量类型的时候,突然想深入的探究各类型的内存结构
于是,便把目光投向了JS
那是因为... ArrayBuffer TypeArray 这些api简直是为我此次学习而量身定制的!
ECMA 啊,你们太贴心啦....


目标是 int 整型
传说中他是32位补码表示
用他小试牛刀,看看 -1 长啥样

//c++ int占4byte,所以先开辟一个4byte (32bit) 存储空间
let buff = new ArrayBuffer(4);
// 然后我想要输入有符号整型之后,能看到他的补码
//in_buff 用来接收输入,输入的是有符号的int
let in_buff = new Int32Array(buff);  
//out_buff 用来输出
let out_buff = new Uint32Array(buff); 
//然后后就是见证奇迹的时刻,看看-1补码长啥样
in_buff[0] = -1;
console.log('十六进制输出', out_buff[0].toString(16).padStart(8,0));
console.log('二进制输出',out_buff[0].toString(2).padStart(32,0) );
console.log('内存结构', new Uint8Array(buff) );

浏览器F12,控制台上一波走
ps: js好用,村里随便找台电脑,打开浏览器,就有运行环境,就有CLI,嘿嘿,爱了

1581691734(1).png

哇!-1的补码16进制那么多f, 2进制那么多1,一看就很补,一看就是对的。

-2,-3,100 .... 照样复制,回车,一波走起
也都没问题

image.png

结论:
int型用补码表示
补码首bit为符号位,正0 负1
剩下为数值位
正数: 直接对应其二进制数;
负数: 为其值按位取反再+1, 说白了就是那个加他刚好能进到第33位的数(他的另一半,有了她,数才能完整,才能升华)




原文链接:segmentfault.com

上一篇:行内元素 在设置绝对定位后的 margin 效果
下一篇:基于React、Redux、Webpack 和 React-Router的项目模板。
相关教程
关注微信

扫码加入 JavaScript 社区

相关文章

首次访问,需要验证
微信扫码,关注即可
(仅需验证一次)

欢迎加入 JavaScript 社区

号内回复关键字:

回到顶部