按位取反运算:int a=16,c=~a;,变量c的值为多少??

来源:百度知道 编辑:UC知道 时间:2024/05/17 03:52:38
还有这个题目的答案是15吗?

在取反运算中符号位要不要参与运算???

大家帮忙,谢谢拉

取反~要把符号位也考虑进去:把操作数各位0变1, 1变0

要考虑符号位的是
左移:把左操作数左移指定位数,右端空位置补0
右移:把做操作数右移指定位数,左端空位置上的值与原来的符号为相同,对无符号数左端移入0;

#include<stdio.h>
void main(){
int a = 16, b = 10, c;
c = ~16;
printf("%d\n",c);
c = a<<2;
printf("%d\n",c);
c = a>>2;
printf("%d\n",c);
}

-17
64
4
Press any key to continue

首先a用二进制表示为0001 0000,~a就是将a的二进制形式按位取反,得到为1110 1111,但在计算机中是以补码存储数据的,而首位默认为符号位,首位为1,则为负数,首位为0,为正数,显然c是负数,反码为除符号位按位取反得到,所以反码为1001 0000,而负数的补码是在其反码末位加1,故其补码为1001 0001,转化为十进制就为-17。这是我的理解,仅供参考

答案应该是-17

所有的位都参与运算,它根本不管每个位的含义!

#include<stdio.h>

main()
{
int a=16,c=~a;

printf("%d\n",c);
}
输出 -17

-17
位运算不考虑符号位.

同意