告诉你原理,1111111111111111的最高位代表负数没错,剩下的15位全是1,在二进制里就是能表示出来的最大的正数了,你想,一个最大的数前面加个负号,那么这个数是不是就成为了最小的负数?电脑里存放的十进制都是小数点前面的数,也就是整数。10进制里最小的负整数,那当然就是-1了。明白了就给我加分吧。
如果是java的话
char应该是16位
大概是这样的
1111111111100000
忘了负数必须变成补码了。。。汗
再补充一些
数字在计算机里存储主要分为两种,一种是无符号的,只表示正数,一种是有符号的,如int
有符号的分为正数与负数,通常用最高位的做符号位
首先你需要把数字化为二进制数,然后判断一下是正数还是负数,正数首位为零,负数首位为1,这是常说的称为原码的东西,正数在计算机里可以直接用原码存储,但负数存储的实际为补码,这也是为了运算简单。补码主要是将除符号位的所有位数变反,最后再加一,通过这个运算得出以上结果
-33原码,反码,补码应该是
1000000000100001
1111111111011110
1111111111011111
然后计算机中以补码形式存储就是最后一种形式才对
顺便说一下,这种二进种是从右到左每移一位就多乘2,最右边是2的0次方,2的一次方,你那个2的六次方就是64,你的计算结果是-65