急急急,急求答案

来源:百度知道 编辑:UC知道 时间:2024/05/06 14:41:42
#include<stdio.h>
main()
{char x=112,y=211;
printf("\n%d",x<<2|y>>1) ;
getch();
}

为什么得-23
能否给出具体的解答过程?我已经转换过了,换不出来

1.负数右移 高位补1
2.你应该查看一下负数在计算机里的表示方法

你定义的char是有符号类型的范围-128~127 大于127将溢出
x=112 二进制为 0111 0000
赋值y=211溢出实为 y=-43 二进制为 1101 0011

x<<2 = 0……01 1100 0000 (共32位)
y>>1 高位补1 得 1……11 1110 1001

进行 | 运算得到 1……11 1110 1001
根据负数表示法 首位1表负数 余下取反+1得 0001 0111=23 即得结果为-23

如果你定义的是unsigned char类型 结果就很明了了

二进制异或的结果再转换成整型

将两个值分别左移2位和右移一位,然后取|得到-23!

112转换成二进制1110000 x<<2 左移两位11000000
211转换成二进制11010011 y>>1右移两位01101001
11000000|01101001=11101001转换十进制为-105
好奇?答案确定是-23?