还是上一篇关于移位的问题那麼什么 int 型数只算术左移一位就可以从负数变成正数??
很早之前写过一篇关于补码的文章但是长时间不看又差不多忘记了,翻出来看發现写的挺烂的有点没说明白,所以希望这里能说明白~~
在计算机中一切的一切都是用补码存储
打一个比喻,东西在计算机中是用各种編码存储不论是字符还是指针(指针也是存储的数据),都是用补码存储我们写的代码相当于是一个外文的说明书,而编译器是翻译器将我们的说明书翻译告诉机器如何解读那些存储的信息。
比如同样一个 128用char解读会出现神奇的效果(详见下篇),但是用int解读还是128!!
代码告诉机器如何解读存储的数据
回到正题那么什么 int 型数只算术左移一位就可以从负数变成正数? 这个数的从左向右数的第二位必然為0可以是 10111…1(30个1)。
那么这个数究竟是多少呢