c语言按位取反~,看不明白输出的结果!!!

#include<stdio.h>
void main()
{
int a,b;
a=4;
b=~a;
printf("\40:The a's 1 complement(decimal) is %d\n",b);
a=~a;
printf("\40:The a's 1 complement(decimal) is %d\n",a);
}
输出结果两个都是-5,怎么会这样呢???

两个结果都是a的反码肯定是一样的啊。
4的二进制表示是(int为4字节)
00000000 00000000 00000000 00000100
其反码就是(每一位取反)
11111111 11111111 11111111 11111011
而这正好是表示-5(int类型是按补码表示的)
至于为什么-5是那样表示,就需要自己去学习下原码,反码,补码的知识
看看这个回答
http://zhidao.baidu.com/question/176436031.html
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-08
第一次将a取反赋值给b,a的值并没有改变,
第2个回答  2011-01-08
当然是一样的啊……
~又不会改变操作数。
第3个回答  2011-01-08
呵呵~楼主还真有种不达目的不罢休的劲啊~
学习就要有这种精神~
这个问题,我在你“关于C语言的问题”里回答过了。楼主去看看吧!
第4个回答  2019-09-22
是递归,除10以后是这个数去掉最低位后的一个新的数,比如108,首先她输出8,然后把108/10=10,把这个数传给函数,然后输出0,然后再除以10=1,再把1传给函数。。。

c语言按位取反~,看不明白输出的结果!!!
两个结果都是a的反码肯定是一样的啊。4的二进制表示是(int为4字节)00000000 00000000 00000000 00000100 其反码就是(每一位取反)11111111 11111111 11111111 11111011 而这正好是表示-5(int类型是按补码表示的)至于为什么-5是那样表示,就需要自己去学习下原码,反码,补码的知识 看看这个回...

c语言,一个按位取反"~"的问题
用原码来显示:~25的原码为补码取反+1<符号位不动> 那么就为:1000000000011001+1=1000000000011010 最高位为符号位这里为负号, 000000000011010=26 所以结果为:-26

c语言,按位取反。
如0xFF按位取反为~(0xFF)按位取反后的结果为0x00 需要注意的是,C语言中的逻辑运算&和&&是不同的 0xFF&0xA0=0xA0 而0xFF&&0xA0=1 一个运算符是按位操作 其返回值是按位操作的结果 两个运算符是逻辑表达式,其返回值只有0和1

C语言按位取反?
按位取反:1 0101 转为原码:1 0101 按位取反:1 1010 反码 末位加一:1 1011 补码 符号位为1是负数,即-11 规律:~x=-(x+1);因此,t=~10(1010)==-11;

C语言问题,关于按位取反问题,大家看一下,这个~操作符。
说到取反,还要设计到的一个东西就是数值的位长。在c语言中,整数有8位(char)、16位(short)、32位(long)等,常用的int在不同的编译环境下,可能是16位也可能是32位,具体的可以用printf("%d", sizeof(int) * 8);的方式确定int的位数。人工进行整数的位运算之前,首先要确定整数的位长,如...

...赋值的问题,回答详细一点。为什么按位取反后输出的结果不一样...
2的二进制是00000010,取反得到11111101,最高位为1,说明这是个负数的补码。负数的补码,是由其绝对值的原码取反加1得到,反过来,将负数的补码减1取反,就得到其绝对值的原码。11111101-1=11111100,再取反得到00000011,即十进制的3。也就是说该负数的绝对值为3,那么这个负数为-3。所以第一个值...

c语言中的位运算符中‘按位取反’是怎么运算的
使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果。例如,假如计算机是32位的,接下来要计算~5的值,计算过程如下:5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101 执行~运算,即~5后: 1111 ...

C语言,按位取反的时候怎么运算的!为什么~1的运算结果是﹣2_百度知 ...
按位取反之后为 1111 1111 1111 1111 1111 1111 1111 1110 有符号的数最高位为1表示负数 负数的补码是其原码取反加1 取补码:1000 0000 0000 0000 0000 0000 0000 0010 结果为-2 -2的二进制为2的反码取补码:原码:0000 0000 0000 0000 0000 0000 0000 0010 反码:1111 1111 1111 1111 1111...

C语言中取反符号怎么打出来的
C语言取反操作为位操作一种,其符号为~。位于键盘左上角,esc键下方,有一个上面为~ 下面为`的键,~符号就是用这个键打出来的。方法为 1 按住shift键,左右均可。2 按~键,即之前说的键。3 抬起shift键。~操作为单目操作,即只需要一个操作数。结果为操作数按位取反,原值某位上值为1,...

按位取反~(~1<<1)另外C语言负数按位取反是啥啊
1 先将1按位取反,即计算~1, 结果为除最低位为0外,其它位均为1;2 计算左移1位,低位补0,于是结果的最低2位为0,其它为为1;3 将2中结果按位取反,得到结果为,最低2位为1,其它为为0;所以最终结果为3。二、在C语言中,负数是以补码方式存放的,计算方法为,负数绝对值对应数值的二...

相似回答
大家正在搜