異或:相同數字得到0,任何數與零異或,最終得到自身,同時異或滿**換律。
# include
# include
intmain()
;int result =0;
for(
int j =
0; j <=
sizeof
(a)/4-
1;++j)
printf
("%d"
,result)
;}
首先將所有的數異或,因為有兩個數出現一次,所以最終得到的異或結果,實際上是兩個出現一次的數的異或結果,由最低位為1可以得知,出現一次的兩個數的這一位一定不同,因些拿到該與所有的數按位與,為1的放在一堆,為0的放在另一堆,為0的放在另一堆,就能將兩個出現一次的數分開,然後對兩堆各自異或,就能找到出現一次的兩個數。ps:乙個數與自身的相反數進行異或到得這個數的最低位的1
# include
# include
intmain()
;int result0 =0;
int result1 =0;
int n =0;
for(
int j =
0; j <
sizeof
(arr)
/sizeof
(int);
++j)
n = n &(-
1* n)
;//找到兩個只出現一次數的異或值的最低位的1
for(
int j =
0; j <
sizeof
(arr)
/sizeof
(int);
++j)
else
}printf
("%d %d "
,result0,result1)
;}
由於3個數字出現一次,其他數字均出現兩次,因此可以得到n一定為奇數。
3個只出現一次的數字,它們的bit位,肯定不可以全部相同,也就是說,雖然有些bit位上的數可能相等,但肯定至少存在某個bit位,在這3個數中,有兩個數的該bit位為1,乙個數的該bit為0,或者兩個數的該bit位為0,乙個數的該bit位為1。
我們可以通過掃瞄int的所有bi位,掃瞄每個bit位時,遍歷陣列,如果能找出符合上面條件的,就可以找出其中乙個只出現一次的數字,該數字與另外兩個只出現一次的數的bit位不同。通過bit位不同分成兩堆,對每堆進行異或,如果異或結果表明兩堆均不為零,那麼說明分開了,偶數個數的那堆有兩個數,奇數個數的那堆有乙個數。
# include
# include
# include
#define n 9
void
findtwonum
(int
* arr,
int result,
int first)
else}if
(split&first)
else
printf
("find2=%d,find3=%d"
,find1,find2);}
intmain()
;int heapresult1, heapresult2;
int heapcount1,heapcount2;
//每一堆元素的數目
int split =
1,i,j;
for(j =
0; j <32;
++j)
else
}//分堆完成後再進行判斷是否是有效的分堆
if(heapcount1 %2==
0&& heapresult1 !=0)
if(heapcount2 %2==
0&& heapresult2 !=0)
}}
# include
# include
void
change
(int
**pa,
int*pb)
//在子函式需要修改主函式內某個一級指標,需要二級指標
intmain()
# include
# include
# include
#define n 5
void
print
(char
(*p)[10
])}void
printpointerarr
(char
**p)
}//二級指標的初始化是某個一級指標變數取位址
intmain()
;int i, j;
int*ptmp;
char
**p2=
(char**
)malloc
(sizeof
(char*)
*n);
//for
(i =
0; i < n;
++i)
print
(b);
for(i = n; i >
1;i--)}
}printf
("------------------------------------\n");
printpointerarr
(p2)
;printf
("------------------------------------\n");
print
(b);
system
("pause");
}
# include
# include
# include
voidb(
)voida(
void
(*p)()
)int
main()
python 有關python的異或操作的分析
今天在刷leetcode的題目中,提及了有關xor,也就是異或的操作。由於自己不太熟悉,因此對異或以及python中的異或操作進行一下分析。1 什麼是異或?邏輯上的異或,通俗點就是兩者相同返回0,兩者不同返回1。比如1 0 1,1 1 0,0 0 0。2 python上的異或 舉個例子很好理解 5 ...
異或 異或相關
感謝 morning glory 贊助 異或異 或 de scri ptio ndes crip tion 給定 l,r l,r,求 i lr j lr i ji l r j l r i jl,r 1 09l,r 1 09 s olut ions olut ion 假設l 1,r 4l 1,r 4,...
異或運算 有趣的異或運算
異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...