举个例子
~100=-101,
首先看等号左边
(100)
的二进制表示为:
0110
0100
按位取反的意思就是每一位取反,0变1,1变0
所以:
~100
的二进制表示为:1001
1011
所以等号左边=1001
1011
再看右边
-101.
一旦看到出现负数,那么这个数一定是按有符号数的规则来表示的。一个二进制数
按位取反并加一以后就可以得到它自己的负数的补码,也就是说:
~x+1=-x
所以,我们把101按位取反加一
先取反:
~101=10011010
再加一:
~101+1=10011011=-101
所以等号右边=10011011=左边,所以等号成立。
p.s:补充一句,计算机内存里的逻辑存储位是非常复杂的,我这里即使讲得再清楚也无法保证你完全明白。
一般来说,汇编语言的书的开头部分会详细讲解这部分知识以服务于汇编语言,请参阅之。
是自增运算,而且是先加1后再执行。例如:
int i,k
for(i=0,k=0i<5i++)
{
k += i++
}
第一次进入时i的初始值是0,k的初始值也是0。这时的i++并没有在本次语句中起到加一的作用,而是要在本次操作结束后再起作用,也就是在第一次循 环完全结束后。进入循环体本人看,k += i++这时由于这里的是i++(需要先操作后加1),所以,k的值理所当然是0了,而在本句结束后i的值就进行了加1操作,在本次循环结束时又进行了一 次加1操作,所以本次循环结束后k=0,i=2;
第二次进入时i的初始值是2,k的初始值是0。同理分析,在k += i++后k的值为2了,而i的值也由于两次i++变为了4。所以,本次循环结束后k=2,i=4;
第三次进入时i的初始值是4,k的初始值是2。同理分析,在k += i++后k的值由于经过原来的值与i当前的值相加后变成了6,而i的值同样是在最后加了两个1。所以在本次循环结束后k=6,i=6;
第四次准备进入循环时,发现i的值已经比5大了。因此,程序终止。最后k的值为6,i的值也为6。
这里的i是格式符以外的“其它字符”,就是“照原样输出”的意思。比如说float x=12.345
则printf("%fi",x)的结果就是输出:
12.345000i