[求助]求按位取反的问题!
#include "stdio.h" main() { int a,b; a=234;
printf("\40: The a's 1 complement(decimal) is %d \n",~a);
getch(); } a=234,取反先转换成二进制是11101010,按位取反应是00010101,十进制是21,为何输出-235?
----------------解决方案--------------------------------------------------------
对于整型变量为16位的编译器
234 :0000000011101010
取反后:1111111100010101
所以位-235
对于其他位数的同理
[此贴子已经被作者于2005-4-4 9:13:31编辑过]
----------------解决方案--------------------------------------------------------
因为int类整数占2个字节,所以其二进制数是0000000011101010
不能省略高位的8个0
----------------解决方案--------------------------------------------------------
可否帮我把1111111100010101计算一下。为何是-235?
----------------解决方案--------------------------------------------------------
Re:求按位取反的问题
int 是两个字节;即16位,当然不能按8位计算了. 对于整型变量为16位的编译器 234 :0000000011101010 取反后:1111111100010101 所以位-235 |
----------------解决方案--------------------------------------------------------
去看看补码吧
235的源码:0000 0000 1110 1011
按位取反: 1111 1111 0001 0100
加1: 1111 1111 0001 0101 ----就得到-235
----------------解决方案--------------------------------------------------------