異或交換兩數
從左神算法視頻裏get到一個小技巧:
通過異或運算來交換兩數
看上去瞬間逼格高了不少
int a=11; int b=12; int temp=a^b; a=temp^a; b=temp^b
其實原理很簡單,
先科普(小白請看)一下異或運算
兩個二進制數異或運算 同位上相同時為0 不同時為1;
(同或運算則相反,相同為1,不同為0)
所以上面 a=temp^a=a^a^b=0^b;
0異或任何數=異或的那個數本身;
所以我們就完成了兩個數的交換;
異或交換兩數
相關推薦
異或交換兩數
span clas style pre 二進制 簡單 技巧 異或運算 pan 從左神算法視頻裏get到一個小技巧: 通過異或運算來交換兩數 看上去瞬間逼格高了不少 int a=11; int b=12; int temp=a^b; a=temp^a; b=temp^b
巨集定義開關和debug printf,巨集定義使用異或交換兩數
1、巨集定義開關和debug printf #define DEBUG_PRINT 1 #ifdef DEBUG_PRINT #define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d: "format"\
^異或實現兩數交換
轉載於:https://blog.csdn.net/zxm1306192988/article/details/50446399 原文:https://blog.csdn.net/u010141928/article/details/76140165 通常我們實現兩數交換不得不引
java常見邏輯練習題,用三杯水、加法、異或交換兩個數
題目:用三杯水、加法、異或交換兩個數 分析:三杯水原理交換直接用第三個變數交換即可,即: 三杯水 int a = 4; int b = 5; int c = a; a = b; b = c; System.out.println(a);
異或交換兩個變數的值
通常做法 #include<stdio.h> #include<stdlib.h> int main() { int a=10, b=20,temp; temp=a; a=b;
關於通過異或交換兩個元素的值的一個陷阱
#include <stdio.h> #include <iostream> using namespace std; void swap(int *a,int *b){ *a = *a ^ *b; *b = *a ^ *b;//將a的值賦給了
用異或交換兩個整數的陷阱
前面我們談到了,可用通過異或運算交換兩個數,而不需要任何的中間變數。 如下面: void exchange(int&a,int&b) { a ^=b; b ^=a; a ^=b; } 然而,這裡面卻存在著一個非常隱蔽的陷阱。通常我們
我為什麼不喜歡用異或做兩數值的交換
大家在初學程式設計的過程中,肯定會學習到使用程式碼去交換兩元素的值雖然已經過去了很久,但筆者對當時老師上課所講的話記憶猶新:“交換兩個值,就像是把醋瓶子裡的酒裝入酒罐,把酒罐子裡的醋倒入醋瓶。要完成此任務,就要多找一個空瓶子,作為兩者的交換的暫存罐”同理,代入程式碼中,我們可
異或實現兩個數的交換
通常的交換兩個變數a,b的過程為 int temp; temp=a a=b; b=temp; 需藉助上面的第3個臨時變數temp. 採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需藉助第3個臨時變數: a = a ^ b;
用異或進行兩個數交換的陷阱
我們都知道可用通過異或運算交換兩個數,而不需要任何的中間變數。 如下面: void exchange(int &a, int &b) { a ^= b; b ^= a; a ^= b; } 然而,這裡面卻存在著一個非常隱蔽的陷阱。通
數論——異或,兩道水題。
lld col tps include ons 區間 二進制 統計 但是 第一題:(沒有鏈接) 題目大意:給你n個數(n <= 1000000),第i個數用ai表示(每個a <= 1000000),求出每個數與其之後的數的xor和。 舉個例子吧,比如三個數1
leecode第二天-使用異或找出數組中的非重復元素
leecode cep single integer put type json true readlines leecode題目描述如下: 給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。 思路: 最開始想到的是使用排
[日常練習] 2. 基於函式輸出9*9乘法表、交換兩數、判斷閏年、清空/初始化陣列、判斷素數的C語言實現
在C語言學習中,我們知道它是面向過程進行程式設計的,強調的是功能行為,其主要框架為:資料結構+演算法。在此也可以理解成:資料+函式。其實,函式在C語言學習中無時無刻不在使用,最為簡單的#include<stdio.h>,這便是我們程式的開頭,也是我們所呼叫的第一個函式,稱為:庫函式。
practise函式實現——乘法口訣表,判斷素數,交換兩數,判斷閏年,陣列的初始清空逆置
1 .實現一個函式,列印乘法口訣表,口訣表的行數和列數自己指定, 輸入9,輸出9*9口訣表,輸出12,輸出12*12的乘法口訣表。 #include<stdio.h> #include<windows.h> voi
利用異或判斷二進位制數中的1的個數的奇偶性
文章目錄 異或壓縮奇偶性資訊 一位一位地異或 利用二叉樹思想異或 關於有符號數和算術右移 利用x &= x-1求二進位制1個數 利用邏輯右移求二進位制1個數 兩個二進位制數異或後結果的1個數的奇偶性 異或
Java中用異或交換值
一般實現兩個變數之間的互換要用第三個變數,這樣做可以,但建立新變數,增加了系統開銷。如果要交換的變數時兩個整數型變數,可以用更高效的方法。例如:^(異或)操作,舉例如下: import java.util.Scanner; public class VariableExchange { p
使用異或運算實現兩數交換
通常我們實現兩數交換不得不引入一個臨時變數temp作為媒介,而使用異或運算也能實現同樣的功能,甚至無需使用臨時變數。 這是一個通常的做法: int main(){ int a=1,b=2,temp; temp=a; a=b; b=temp; printf("%d,%d\n",a,b); ret
用異或操作實現的交換函數用以實現數組逆置中須要註意的問題
span include style 試題 blog text fontsize lib mod 用元素交換函數實現數組逆置非常easy,如以下代碼:(數組左右元素交換) #include<iostream> #include<stdlib.h>
leetcode算法題1: 兩個二進制數有多少位不相同?異或、位移、與運算的主場
output 判斷 ++ 輸入 urn ger ria 結果 ret /* The Hamming distance between two integers is the number of positions at which the corresponding bit
為什麽三次異或操作可以交換兩個數
找到 原來 們的 異或操作 去掉 進制 ont 交換兩個數 一位 a和b是兩個整數,經過以下三次異或操作,可以達到交換目的:a = a ^ b;b = a ^ b;a = a ^ b; 首先要理解,什麽是^(異或)操作: 二進制兩數運算結果: 0 ^ 0 = 0