c语言 i=10 j=~i j的值等于11????为什么??? 请高手指点

i=1;i++,++i,i++;\u6700\u7ec8i\u7684\u503c\u7b49\u4e8e\u591a\u5c11c\u8bed\u8a00

4

J\u6ca1\u6709\u521d\u59cb\u5316,\u5b83\u7684\u503c\u662f\u4e0d\u786e\u5b9a\u7684,\u5e94\u8be5\u662f\u5b83\u5206\u914d\u5230\u7684\u90a3\u4e2a\u5b58\u50a8\u5355\u5143\u539f\u6765\u7684\u503c.
J=(++i)+(++i)\u7b2c\u4e00\u4e2a++i\u662f8,\u7b2c\u4e8c\u4e2a\u662f9,J\u5c31\u4e3a17.
++\u5728\u524d\u662f\u5148\u52a01\u518d\u8fd0\u7b97,++\u5728\u540e\u5c31\u662f\u5148\u7b97\u4e86\u518d\u52a01.

结果应该为-11。
数字在计算机中都是以补码存放的。
10的补码为00000000 00000000 00000000 00001010
~i,即取反,故得:11111111 11111111 11111111 11110101
这是在计算机中存放得值,是一个数得补码,那么这个补码所对应的原码是多少呢(补码转源码的知识,源码=补码取反再加1)
符号位保持不变,1表示负号,即:
10000000 00000000 00000000 00001010 +1,得到
10000000 00000000 00000000 00001011,即:-11

i = 10;
编译器默认为 int型
二楼正解。
补充二点:
1、目前的兼容机上一般是正数用原码表示,负数用补码表示。所以二楼说的原码=补码取反再加1 是指负数,符号位
2、这是平台相关的,所以还要考虑到程序的移植性降低。

如果你定义为 unsigned int i = 10; 取反就是直接对应原码,因为没有符号位。

正数的原码,补码,反码都相同,都等于它本身
负数的补码是:符号位为1,其余各位求反,末位加1
反码是:符号位为1,其余各位求反,但末位不加1
也就是说,反码末位加上1就是补码

你用的是位操作符.位操作符与变量类型有很大关系的,会直接影响最后的结果.请给出i,j的类型.而且好象算了下,不管是什么类型,取反后都不会一个10,一个11.你最好多贴一些代码出来,才能帮你分析,可能你还有什么地方弄错了,才最后会出现你现在的这种情况

我觉得你应该把完整的程序给出来,光看你写的这个连具体是啥都看不清,i前面那个是 - 还是什么啊?

i=10的十六进制数是000a,二进制数是0000 0000 0000 1010(由于int型是两个字节的,所以二进制长16位)。
对i按位求反后(即j=~i),j在计算机存储是二进制变为1111 1111 1111 0101.由于整数在计算机中是按补码表示的,所以要将计算机中的值要变为平时我们看见的十进制要进行转化。
首先要懂得计算机是怎样存储整数的,然后才懂得如何进行转化。计算机中的整数分为两类:不带符号的整数(Unsigned Integer),这类整数一定是正整数;带符号的整数(Signed Integer),此类整数既可表示正整数,又可表示负整数。不带符号的整数常用于表示地址等正整数,显然C语言中的不是地址,所以是带符号整数。带符号的整数使用一个二进制作为其符号位,一般总是最高位(最左面的一位),“0”表示“+”(正),“1”表示“-”(负数)。若是正数(即最高位位0),则其余各位的绝对值就用来表示数值的大小;若是负数(即最高位为1),则其绝对值部分是反码的个位加“1”。反码就是除了符号位,其余是原码的按位求反,如-10(假设为一个字节存储)的原码是10001010,则反码是1111 0101,补码是1111 0110.补码的补码是原码。
j的二进制是1111 1111 1111 0101,其数值部分取反后是1000 0000 0000 1010,则补码是刚才的二进制加1,即1000 0000 0000 1011。由于最高位是1,所以是负数,其余1011十进制是11.所以结果j=-11.

扩展阅读:扫一扫题目出答案 ... c#菜鸟教程 ... c++编程 ... c#制作计算器 ... c++教程 ... collection ... c语言a 10 是什么意思 ... c语言中a 10 啥意思 ... c语言i++和++i的区别 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网