c++的转换

来源:百度知道 编辑:UC知道 时间:2024/05/27 05:55:44
i=~10,x=~-3,请问这2个按位求反怎么做,写出步骤

结果分别是 -11 和 2. 有点难度!

运算前,先要明确两点:
1.数值在内存中以补码的形式存放的,运算的时候也是以补码来运算的。
(1).正数:原码 = 补码 =反码。
(2).负数:补码 = 256 - |负数的绝对值|。求其原码,则 256 - 补码 = |负数| ,但需要把首位变为1。
(或 补码 - 256 = 原码 )

2.在输出表示的时候,是用原码来表示,原码的显示是为了直观.

3.有符号数在内存中以补码表示时,最高位是符号位,0为正,1为负。下面用8位进行运算时最高位都代表符号位。

1.运算过程(以补码取反)
正数取反,直接取反。 10 D = 00001010 B —按位取反得—> 11110101 B(取反后计算机存储的结果) ,显然是负数,
而11110101B = 128+64+32+16+4+1=245,故输出原码是,245 -256 = -11。

负数取反,化补取反。 -3 D = 10000011 B —化为补码—> 256 -|-3| = 253,253=11111101 B—取反—>00000010,显然是正数,故输出00000010B = 2.