首先,^是异或,不是或,异或是指位不同则为1-3^2:-0011^0010(我以四位为例,实际一般是32位,和机器有关)负数要用补码(除符号位外取反加1)计算,即1011取反加1:1101(-3补码),1101^0010得1111(补码),转...
你好,你的解释很好,对我的理解很有帮助,我翻遍了教科书和网络都找不到位运算的这些运算细节,或者都对操作数是负数的位运算避而不谈。不过我还想要你告诉我,为什么(-3^2)或(3^-2)的结果是补码需要转原码,而(-3^-2)操作前也同样转成了补码,运算后却不用转回原码呢?
负数在计算的时候需要用补码表示才能进行计算(因为机器只知道0,1,异或不知道-这个符号怎么去计算),而显示的时候是显示的原码,所以如果是负数,就需要在计算时转补码,而如果对于2进制的有符号整数的结果符号位为1的话,输出的时候也要先转为原码的。
哦,原来是这样啊,谢谢!我还有最后一个疑问,如果得到的结果是1000(也就是-0)这样的补码的话,转回成原码的话要减1再取反,可是都不够减啊?那是不是要向高位借就是(1111)再取反成为(1000)啊?
补码是1000,那么减1,就得0111,取反,符号位不变,0000,就是0;+0=-0=0。