交換a、b的值temp = a; a = b; b = temp;比a = a^b;b = a^b;a = a^b;快
<span style="font-size:14px;"> int a=222; int b=111; int size = 1000000000; int temp=0; long start = System.nanoTime(); for (int i = 0; i < size; i++) { temp = a; a = b; b = temp; } System.out.println("用時ns:"+(System.nanoTime()-start)); a=222; b=111; start = System.nanoTime(); for (int i = 0; i < size; i++) { a = a^b; b = a^b; a = a^b; } System.out.println("用時ns:"+(System.nanoTime()-start));</span>
執行結果(納秒):
用時ns:996150
用時ns:1769620
發現使用賦值交換比位運算交換兩個數的值要快將近一倍。
相關推薦
交換a、b的值temp = a; a = b; b = temp;比a = a^b;b = a^b;a = a^b;快
先看程式碼,交換a、b的值十億次<span style="font-size:14px;"> int a=222; int b=111; int size = 1000000000; int temp=0; long start = Sy
a=15,b=2,如何不通過其他變數和=符號交換a、b的的值
不能通過=符號交換的話,也就是說不能用其他變數去取儲存兩者值了。於是馬上想到了異或運算子:^ a = 15 二進位制:1111 b = 2 二進位制:0010 a = a ^ b = 1101 = 13 b = b ^ a = 1111 = 15 a = a
不用中間變數,交換a、b值
如果要交換a、b之間的值,一般的做法是: tmp=a;a=b;b=tmp;這種方法不得不使用一個臨時變數。 從網上學來一個方法,可以不用使用臨時變數: a^=b^=a^=b; 這樣計算之後,就可以交換a、b值
如何將a、b的值進行交換,並且不使用任何中間變數?
可以採用a、b之間的加減運算來實現: a = a + b; b = a- b; a = a - b; 這樣做的缺點是如果a、b是比較大的兩個數,進行相加求和時就會超界。 用異或(位運算子^,也即互斥,對應位只有一個為1時結果為1,否則為0)則不用擔心越界問題:
不使用任何中間變數如何將a、b的值進行交換
此題主要是考察工作經驗,在日常工作中經驗遇到記憶體不夠的情況,在記憶體不夠的情況,怎麼不使用中間變數使兩個變數的值進行交換呢? 程式碼實現: #include<stdio.h> #include <stdlib.h> void swap1(int&
設計演算法將一個帶頭結點的單鏈表A分解為兩個具有相同結構的連結串列B和C,其中B表的結點為A表中值小於零的結點,而C表的結點為A表中值大於零的結點(連結串列A中的元素為非零整數,要求B、C表利用A表的結點)。
語言:C++ #include <iostream> using namespace std; typedef struct LNode { int data; LNode *next; }LNode,*LinkList; //建立連結串列 int CreateList(Li
已知自然數A、B不互質,A、B最大公約數和最小公倍數之和為35,那麼A+B的最小值是多少?
已知自然數A、B不互質,A、B最大公約數和最小公倍數之和為35,那麼A+B的最小值是多少? AB不互素,那麼設(A,B) = dA = daB = db那麼(a,b) = 1最小公倍數為dabd+dab =35所以d(ab+1) = 5*7如果d = 5那麼ab = 6那麼(a,b)=(1,6)(2,3)
求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。
解題思路: 一元二次方程 ax²+bx+c=0(a≠0) 其求根依據判定式△的取值為三種( △=b²-4ac ) 1. △>0,方程有兩個不相等的實數根; x1=[-b+√(△)]/2a; //(
面試題——a、b交換與比較
面試題1: 有兩個變數a和b,不用“if”,"?"、"switch"或其他判斷語句,找出兩個數中間比較大的 方案一: int max = ((a+b)+abs(a-b))/2 注:abs()--求絕對值 方案二: int c = a-b; char * strs[2] =
1079: C語言程式設計教程(第三版)課後習題8.2---求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。【兩種方法】
題目描述 求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。 輸入 a b c 輸出 x1=? x2=? 樣例輸入 4
開啟3個線程,這3個線程的ID分別為A、B、C,每個線程將自己的ID在屏幕上,要求輸出結果必須按ABC的順序顯示:ABCABC
abc multi adf ++ include vol form 主線程 tdi 1 #include <stdio.h> 2 #include <process.h> 3 #include <windows.h> 4 5
Codeforces Round #439 (Div. 2)【A、B、C】
ring open 方法 tar index none 矩形 %d 個數 Codeforces Round #439 (Div. 2) codeforces 869 A. The Artful Expedient 看不透( 1 #include<c
Codeforces Round #440 (Div. 2)【A、B、C、E】
one target minimum contest () 同一行 += 不同 href Codeforces Round #440 (Div. 2) codeforces 870 A. Search for Pretty Integers(水題) 題意:給兩個數
Codeforces Round #441 (Div. 2)【A、B、C、D】
algorithm amp puts spa splay http con 無法 是否 Codeforces Round #441 (Div. 2) codeforces 876 A. Trip For Meal(水題) 題意:R、O、E三點互連,給出任意兩點間距
給定a、b兩個文件,各存放50億個url,每個url各占用64字節,內存限制是4G,如何找出a、b文件共同的url?
.... 不同的 來看 相同 兩個文件 oom 兩個 存在 明顯 題目描述:給定a、b兩個文件,各存放50億個url,每個url各占用64字節,內存限制是4G,如何找出a、b文件共同的url? 分析:我們先來看如果要把這些URL全部加載到內存中,需要多大的空間。 1MB
Codeforces Round #443 (Div. 2) 【A、B、C、D】
log ram har bre 個人 algorithm -a 的人 lan Codeforces Round #443 (Div. 2) codeforces 879 A. Borya‘s Diagnosis【水題】 1 #include<cst
A、B、C、D、E五類IP地址
1.2 targe 使用 用途 net 特殊 tro 找到 就是 轉:【A、B、C、D和E類IP地址】 IP地址分為A,B,C,D,E五類。 網絡號:用於識別主機所在的網絡;主機號:用於識別該網絡中的主機。 其中A類分配給政府機關使用,B類地址給大中型企業使用,C類地址給個
IP地址分為A、B、C、D、E五類
私有 局域網 中一 ip地址 一個 span space 2.0 特殊 IP地址分為A、B、C、D、E五類網絡號:用於識別主機所在的網絡主機號:用於識別該網絡中的主機其中A類地址分配給政府機關使用,B類地址給大中型企業使用,C類地址給個人使用。這三種是主要的。IP地址分為五
IP地址的分類及範圍詳解:A、B、C、D、E五類是如何劃分的?
網絡地址分類 IP地址分類 IP地址劃分 IP地址類型 IP地址範圍 IP地址的分類及範圍詳解:A、B、C、D、E五類是如何劃分的?最近在考證,有一項內容是網絡IP地址劃分的題目,一直從事IT的猛然發現回答這個問題時產生了懷疑,於是習慣百度了一下,發現網上廣泛流傳的有關IP地址劃分的文章居
給定區間[-2的31次方, 2的31次方]內的3個整數A、B和C,請判斷A+B是否大於C。
pat鏈接:https://www.nowcoder.com/pat/6/problem/4077題目描述給定區間[-2的31次方, 2的31次方]內的3個整數A、B和C,請判斷A+B是否大於C。輸入描述:輸入第1行給出正整數T(<=10),是測試用例的個數。隨後給出T組測試用例,每組占一行,順序給出A