第1个回答 2013-01-05
对于正数,该数原码和补码相同,对于负数其补码的求解遵循以下步骤
(1)求出该数的绝对值的二进制原码。(2)求原码的反码:把各位的1转化为0,0转化为1。如果原码为111101,其反码为000010。(3)将反码加1,即是原码的补码,加法遵循二进制加法。将上述反码加1,即000011.
a的二进制原码为00000000 00000001 (一共16位,为便于查看位数中间用空格标记),b的原码:00000000 00000010,c的原码为00000000 00000011。-c的原码:先求原码即c的原码,再求反码:11111111 11111100.最后求-c的原码:11111111 11111101.
求a|b即是a和b的补码的每个二进制位析取后的结果(即通常所说的”或“)结果:00000000 00000011,然后减去c的补码(二进制减法)得:00000000 00000000,化成十进制为0。
∧是按位异或符号:运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0。a∧b=00000000 00000011
&按位与运算符:运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;上述a∧b的结果与-c按位与得
00000000 00000001,化成十进制为1;
这个求解的过程需要用到二进制、十进制的相互转化;具体你可搜百度百科:进制间的转化,里面的介绍十分详细。
希望我的解答能够对你有所帮助!!
第2个回答 2013-01-05
这种问题得先弄明白运算符的优先级。
第一题,减号优先级高于或运算,b-c=-1,1|-1,计算机是用补码格式存储的,如果是int型32位,-1的补码是FFFFFFFF,1的补码是00000001,或运算之后,还是FFFFFFFF,因此第一题结果为-1.
第二题,先 - 再&最后∧,2&-3,同样补码运算,是00000002&FFFFFFFD,结果为00000000,也就是结果为0.
第3个回答 2013-01-05
@1
位操作就是对每个二进制位进行逻辑操作的结果,01 10 每位取或的话 是 11 就是3 再减c 就是0了
@2
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
& 位且 00000010 (2) 100000011(-3) 的话就是 000000010 结果是2
再 1^2 就是 01 10 每位都不同所以 是 11 也就是 3
第4个回答 2013-01-05
a|b-c= 1|2-3=1|-1=-1;
a^b&-c=1 ^2 & -3 =1^ 0 =1
负号优先级最高
&优先级比^高
-3 =0xffff fffd
2 =0x0000 0002
//2进制
//2&d =0010 & 1101 =0本回答被提问者和网友采纳