久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
樓主: f556
打印 上一主題 下一主題
收起左側

不用中間數交換兩個變量的方法

  [復制鏈接]
41#
ID:753146 發表于 2020-5-16 10:48 | 只看該作者
樓主有點武斷了,用加法交換雖然會溢出但結果依然正確。在指出問題之前最少要動手試一試。
回復

使用道具 舉報

42#
ID:753146 發表于 2020-5-16 10:50 | 只看該作者
溢出不影響結果,樓主方向錯了。
回復

使用道具 舉報

43#
ID:47286 發表于 2020-5-20 17:09 | 只看該作者
請教兩個問題 如下應該是最傻愣的方法吧 第一這樣也不限制長度 不管是char還是int 因為過程變量的長度是相同的 第二不需要運算 只是賦值 會比你的方法速度快 是么

uchar a=123;
uchar b=234;

void swap()
{
uchar c;
c=a;
a=b;
b=c;
}
回復

使用道具 舉報

44#
ID:467862 發表于 2020-5-25 15:53 | 只看該作者
好厲害,電賽初學者剛好
回復

使用道具 舉報

45#
ID:762498 發表于 2020-5-27 14:58 | 只看該作者
好東西值得去想和學習
回復

使用道具 舉報

46#
ID:764107 發表于 2020-5-30 17:26 | 只看該作者
樓主的這個帖子很有意義,用到了異或的性質:
只要有: a^b=c
那么對于()^()=()可以隨便填入a、b、c 都成立,交換數來説也就很簡單了
MOV A,#33H
MOV 30H,#66H
XRL A,30H
XRL 30H,A
XRL A,30H
在一些寄存器不夠的地方用剛剛好,學習了
回復

使用道具 舉報

47#
ID:807712 發表于 2020-8-29 16:16 | 只看該作者
有那么點意思,值得發揚光大!
回復

使用道具 舉報

48#
ID:483991 發表于 2020-8-29 16:31 | 只看該作者
頂起!值得推廣!
回復

使用道具 舉報

49#
ID:337139 發表于 2020-9-23 16:47 | 只看該作者
你這種方法可行,只是單片機就需要花更多是時間去處理,效率有點低。
回復

使用道具 舉報

50#
ID:838081 發表于 2020-11-6 14:28 | 只看該作者
你的思路不錯
回復

使用道具 舉報

51#
ID:8222 發表于 2020-11-28 07:54 | 只看該作者
wanghz12 發表于 2020-3-22 13:53
int x,y;
x=x+y;
y=x-y;

x=x+y可能會溢出。
回復

使用道具 舉報

52#
ID:879809 發表于 2021-1-23 18:06 | 只看該作者
溫xyz 發表于 2020-11-28 07:54
x=x+y可能會溢出。

溢出不影響結果的正確性。
回復

使用道具 舉報

53#
ID:878235 發表于 2021-1-28 13:56 | 只看該作者
Daniel008 發表于 2020-1-20 16:30
相等就不用交換了

所謂的相等,是認為分析,
在程序運行時 A  B  有時相等,有時不相等
例如  A 是用戶指定的數據
        B  是函數得出的返回值

那么:我們控制不了的兩個數據,他們有可能相等(作者認為相等的會出錯),有時候不相等
回復

使用道具 舉報

54#
ID:886836 發表于 2021-3-24 17:23 | 只看該作者
不同的思維方式,看了很受益
回復

使用道具 舉報

55#
ID:855987 發表于 2021-3-27 15:56 | 只看該作者
好方法呀!
回復

使用道具 舉報

56#
ID:693254 發表于 2021-5-12 14:53 | 只看該作者
方法不錯~~不過大型的程序會在意這個小算法嗎?
回復

使用道具 舉報

57#
ID:511754 發表于 2021-5-25 09:28 | 只看該作者
討論熱烈拓展思路
回復

使用道具 舉報

58#
ID:123289 發表于 2021-6-23 15:42 | 只看該作者
1、程序運行時間長;
2、占用存儲器多;
3、不實用。
將這段程序編譯后,看看所用的代碼就知道有多蠢了。
比起:A--->C,B---->A,C----->B 的方案差遠了。
回復

使用道具 舉報

59#
ID:519089 發表于 2021-7-14 19:16 | 只看該作者
時間換空間
回復

使用道具 舉報

60#
ID:519089 發表于 2021-7-14 19:17 | 只看該作者
PUSH A
MOV A,B
POP B
最簡單
回復

使用道具 舉報

61#
ID:510342 發表于 2021-7-23 11:28 | 只看該作者
rotga 發表于 2019-12-16 08:51
這種交換方法有一個前提,就是aa和bb不能相等,如果相等,則會得出錯誤的結果。所以在做異或運算前,需要進 ...

1.相等了 就可以不用交換了;
2.可以加個判斷,只有不相等的時候才會有下面的交換
回復

使用道具 舉報

62#
ID:130230 發表于 2021-8-2 17:05 | 只看該作者
rotga 發表于 2019-12-31 10:08
不是明顯錯了,而是模擬在復雜環境里面,很有可能產生待比較的兩個數的指針指向同一地址,而結果你也看到了 ...

你用其它方法指向同一個地址也是會有問題的,這個和樓主的算法無關。
回復

使用道具 舉報

63#
ID:584195 發表于 2021-8-3 22:26 | 只看該作者
這是什么原理?可以解釋一下嗎?
回復

使用道具 舉報

64#
ID:584195 發表于 2021-8-3 22:29 | 只看該作者
rotga 發表于 2019-12-16 08:51
這種交換方法有一個前提,就是aa和bb不能相等,如果相等,則會得出錯誤的結果。所以在做異或運算前,需要進 ...

你是最牛的人,給你點贊先!
回復

使用道具 舉報

65#
ID:958719 發表于 2021-8-3 22:48 | 只看該作者
初學者的天堂
回復

使用道具 舉報

66#
ID:88256 發表于 2021-8-4 00:57 | 只看該作者

我也想這樣說的,這個占用的是預留的空間,過后歸還,不會額外占用空間
回復

使用道具 舉報

67#
ID:513213 發表于 2021-8-7 23:56 | 只看該作者
rotga 發表于 2019-12-22 22:54
#include
void swap(int *a,int *b)
{

這句錯了swap(&test[0],&test[0]);
應為  swap(&test[0],&test[1]);
回復

使用道具 舉報

68#
ID:624769 發表于 2021-9-24 23:20 | 只看該作者
specialClass 發表于 2020-5-30 17:26
樓主的這個帖子很有意義,用到了異或的性質:
只要有: a^b=c
那么對于()^()=()可以隨便填入a、b、 ...

兄弟,你都用匯編寫了……
你直接一個  XCH A,30H 不就換過來了么? 還那么幾個 XRL 干嘛啊?
回復

使用道具 舉報

69#
ID:624769 發表于 2021-9-24 23:27 | 只看該作者
表面上看,不占用中間變量,實際上至少占用了累加器A,根據不同的編譯方式還可能占用寄存器B,一樣動用了累加器A,你先移動到累加器A,再互相移位遠比反復運算要好得多。
回復

使用道具 舉報

70#
ID:468878 發表于 2021-11-3 11:37 | 只看該作者

你這種算法很好。運行效率與可讀性應該是比較強的。
不過我覺得還是設個中間數的最簡單明了,不用去規避一些未知的坑。
回復

使用道具 舉報

71#
ID:22218 發表于 2022-3-19 05:10 | 只看該作者
異或效率該比加減高吧?這個出來40年了吧?我好奇還有折磨多人發帖
回復

使用道具 舉報

72#
ID:115923 發表于 2022-3-19 09:28 | 只看該作者
#include <stdio.h>

int main(void)
{
   unsigned int a=65530;
   unsigned int b=65535;
   
printf("交換前a,b的值分別為:\n");
    printf("a=%d\n",a);
    printf("b=%d\n",b);
   
a=a+b;   //a=a*b;
   
b=a-b;   //b=a/b;
   
a=a-b;   //a=a/b;
   
printf("交換前a,b的值分別為:\n");
    printf("a=%d\n",a);
    printf("b=%d\n",b);
       
        return 0;
}


已經測試了, 沒有問題, 不會溢出問題
回復

使用道具 舉報

73#
ID:1017814 發表于 2022-4-16 14:43 | 只看該作者
就用一下一個中間變量又能咋滴?

 想起了一個笑話,3個專家和一個農民在說下雨時雨滴的問題,這個故事 就不在這里說了。

原來這個笑話是說我們程序猿的。。。。。。。
回復

使用道具 舉報

74#
ID:397054 發表于 2022-6-11 20:02 | 只看該作者
zyluglugl 發表于 2021-8-3 22:26
這是什么原理?可以解釋一下嗎?

有兩條:
1是,異或運算既滿足交換律也滿足結合律;
2是,與自己異或結果是0且0與一個值異或結果就是那個值。
回復

使用道具 舉報

75#
ID:397054 發表于 2022-6-11 20:17 | 只看該作者
dzbj 發表于 2020-5-20 17:09
請教兩個問題 如下應該是最傻愣的方法吧 第一這樣也不限制長度 不管是char還是int 因為過程變量的長度是相 ...

異或運算是CPU最拿手的運算之一,與賦值也不相上下,都可以是單周期單字節指令,速度上差不了多少只是程序的可讀性差點。賦值的方法要開辟第三個變量并也是要對其操作的,時間上不見得有多少優越性。
回復

使用道具 舉報

76#
ID:397054 發表于 2022-6-11 20:40 | 只看該作者
guyunfeng 發表于 2020-5-16 10:50
溢出不影響結果,樓主方向錯了。

溢出的確不影響結果,但樓主的方向哪里錯了?他這個方法的結果不對嗎?這兩種方法都有可讀性問題,但相比之下很顯然樓主的更專業,可讀性、嚴格性要好得多,常用C語言尤其是匯編語言的都對溢出、反碼補碼很在乎,這是習慣。我還是第一次看到這么做,看到加減法時也立即想到了有溢出問題,假如是別人寫的程序要我來檢查的話,我肯定要多花時間精力甚至詢問編程者來肯定它的正確性,而樓主的方法嚴格明了,不必跟任何人商量,可讀性、專業性樓主的要好得多,何來“方向錯誤”?
回復

使用道具 舉報

77#
ID:397054 發表于 2022-6-11 20:49 | 只看該作者

你這是匯編語言,你這么做恰恰是舍近求遠,微處理器、單片機都有交換指令,一條指令即可,早年的Z80是XCHG,86處理器也是,51的匯編寫法好像是XCH,當目標和原都是寄存器時,交換指令是典型的單周期單字節指令。
回復

使用道具 舉報

78#
ID:397054 發表于 2022-6-11 21:05 | 只看該作者
1823711995 發表于 2020-4-30 16:52
把加法換為減法不就可以了?減法不會溢出,也比異或效率高

換為減法也可以,但也有問題,小減大會得到補碼,這個你想過沒有?但是,也不影響結果,也行得通,可讀性那就比加法還差。。。。“減法比異或效率高”——這個是錯的,【異或】運算是CPU最拿手的指令,無出其右,你大概不太熟悉數字電路,加法電路就是異或電路,如果是單純的異或那就連進位都不需要,完整的加法電路就是帶進位的異或電路。
回復

使用道具 舉報

79#
ID:397054 發表于 2022-6-11 21:19 | 只看該作者
這個方法不會比更流行的賦值方法慢,異或運算是CPU上處理起來最快的指令,不會比賦值慢,更不會比加減法慢,它們都可以是單字節單周期指令,樓主的方法比加減法要好得多,相比之下嚴格、明了得多,老手都會用樓主的方法而不會去用加減法的雖然它也正確,加減法明顯的很笨拙、不專業。
回復

使用道具 舉報

80#
ID:397054 發表于 2022-6-11 21:56 | 只看該作者
yzwzfyz 發表于 2021-6-23 15:42
1、程序運行時間長;
2、占用存儲器多;
3、不實用。

不會的,如果是匯編語言,這個算法只快不會慢,它少用了一個變量怎么會“占用存儲器多”呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本黄色片免费在线观看 | 亚洲免费一 | 91久久看片| 欧美一区二区 | 国产欧美日韩一区二区三区在线观看 | 毛片一级片| 国产精品久久久久无码av | 91久久精品日日躁夜夜躁欧美 | 午夜视频在线 | 欧美成人一区二区 | 欧美国产日韩一区二区三区 | 久久中文字幕av | 99精品在线免费观看 | 国产探花在线精品一区二区 | 亚洲精品一区二区三区 | 久久成人激情 | 久久久久一区二区 | 第四色狠狠 | 先锋资源网站 | 久草免费在线 | 美女视频久久 | 亚洲综合色自拍一区 | 精品一区二区在线观看 | 精品国产一区二区三区观看不卡 | 日韩中文在线视频 | 四虎影视一区二区 | 成人深夜小视频 | 国产伦精品一区二区三区照片91 | 中文字幕在线欧美 | 久久国产精品久久 | 欧美国产精品一区二区三区 | 久久一区二区三区四区五区 | 亚洲综合在线视频 | 天天天操 | 中文字幕日韩一区 | 日韩视频高清 | 日韩精品一区二区三区中文字幕 | 亚洲国产成人av好男人在线观看 | 日韩欧美三级电影在线观看 | 久久69精品久久久久久久电影好 | 97国产精品 |