Đổi chỗ hai số mà không sử dụng biến thứ ba: C, Python chương trình
Trong lập trình, việc chuyển đổi ngôn ngữping có nghĩa là trao đổiping Giá trị của hai biến. Biến này có thể chứa số, chuỗi, danh sách hoặc mảng, đối tượng, v.v. Cách hoán đổi thông thường.ping Đó là sử dụng một biến tạm thời để lưu trữ các giá trị. Ví dụ:
Các bước chung của việc trao đổiping Hai số đó là:
- Khai báo một biến tạm thời C
- Gán giá trị của A cho C, nghĩa là C = A. Bây giờ C = 20
- Gán giá trị của B cho A nên A = 30
- Gán giá trị của C cho B, Vậy B = 20, vì C có giá trị 20.
Đó là cách trao đổiping Việc này được thực hiện với sự trợ giúp của một biến tạm thời. Phương pháp này sẽ hoạt động được cả với số nguyên và số thực.
Hoán đổi bằng phương trình số học
Như chúng ta đã biết, trao đổiping Hoán đổi nghĩa là trao đổi nội dung của hai đối tượng, trường hoặc biến. Hoán đổi bằng phép toán số học nghĩa là thực hiện thao tác hoán đổi bằng cách sử dụng phương trình toán học, tức là phép cộng và phép trừ.tracsự.
Nếu chúng ta được cho hai số và được yêu cầu hoán đổi mà không sử dụng biến tạm thời, thì sử dụng ba phương trình số học, chúng ta có thể hoán đổi các số đó.
Mã giả cho thao tác hoán đổiping số bằng phép toán số học:
A = A + B B = A - B A = A - B
Giả sử chúng ta có hai số A = 20 và B = 30.
Điều kiện 1: A = A+B
Vậy giá trị hiện tại của A là 20+30 = 50
Điều kiện 2: B = AB
Bây giờ, B = 50-30 = 20
Chúng ta có thể thấy rằng chúng ta đã nhận được giá trị của A trong B
Điều kiện 3: A = AB
Cuối cùng, A = 50-20 = 30
A có giá trị ban đầu là B.
Vì vậy, chúng tôi chỉ trao đổi số.
Đây là chương trình hoán đổi hai số trong C/C++:
#include<stdio.h>
int main()
{
int a, b;
printf("Enter value of A: ");
scanf("%d", & a);
printf("Enter value of B: ");
scanf("%d", & b);
printf("A = %d, B = %d", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("\nNow, A = %d, B = %d", a, b);
}
Đầu ra:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Chương trình trong Python:
a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a + b
b = a - b
a = a - b
print("Now, A = {} and B = {}".format(a, b))
Đầu ra:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Bây giờ trong Python, chúng ta thậm chí không cần thực hiện các phép tính số học. Chúng ta có thể sử dụng:
a,b = b,a
Đây là minh họa trong đó a=20, b=30;
Hoán đổi bằng cách sử dụng Bitwise XOR Operator
Phương pháp này cũng được gọi là XOR swap. XOR có nghĩa là OR loại trừ. Chúng ta lấy hai bit làm đầu vào cho XOR trong phép toán bitwise này. Để có một đầu ra từ XOR, chỉ một đầu vào phải là 1. Nếu không, đầu ra sẽ là 0. Bảng sau đây hiển thị đầu ra cho tất cả các kết hợp đầu vào A B.
Chúng ta cần biết cách hoạt động của phép toán XOR để hoán đổi hai số bằng phép toán bitwise. Sau đây là bảng XOR trong đó A và B là các giá trị đầu vào.
| A | B | A XOR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Nếu hai đầu vào có cùng giá trị, thì phép toán XOR cho kết quả là 0; nếu không, thì là 1. Đối với ví dụ này, chúng ta sẽ sử dụng phép toán XOR 3. Trong hầu hết các ngôn ngữ lập trình, XOR được ký hiệu là “^”.
Giả sử A=4 (ở dạng nhị phân = 0100) và B=7(ở dạng nhị phân, 0111)
Điều kiện 1: A = A^B
| A | 0 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 1 |
| A ^ B | 0 | 0 | 1 | 1 |
Bây giờ, A = 0011 (ở dạng nhị phân).
Điều kiện 2: B = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| A ^ B | 0 | 1 | 0 | 0 |
Vì vậy B = 0100, là giá trị nhị phân ban đầu của A.
Điều kiện 3: A = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| A ^ B | 0 | 1 | 1 | 1 |
Cuối cùng, A = 0111, là giá trị nhị phân tương đương của B.
Chương trình bằng C/C++:
#include<stdio.h>
int main()
{
int a, b;
printf("Enter value of A: ");
scanf("%d", & a);
printf("Enter value of B: ");
scanf("%d", & b);
printf("A = %d, B = %d", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("\nNow, A = %d, B = %d", a, b);
}
Đầu ra:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Chương trình trong Python:
a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a ^ b
b = a ^ b
a = a ^ b
print("Now, A = {} and B = {}".format(a, b))
Đầu ra:
Enter the value of A:10 Enter the value of B:15 A=10 and B=15 Now, A=15,B=10.
Trao đổi Numbers sử dụng Bitwise-Arithmetic
Phương pháp này tương tự như phương pháp số học, nhưng chúng ta sẽ sử dụng các phép toán bitwise như AND, OR và phép bù để thực hiện phép cộng và phép trừ.tracTrước khi đi vào các bước, chúng ta hãy cùng điểm qua nhanh mục "Lời khen".
Phần bù 1 có nghĩa là thay đổi tất cả 0 thành 1 và 1 thành 0. Hãy xem một ví dụ.
- Giả sử số 23, một số thập phân.
- Chuyển đổi sang nhị phân sẽ sử dụng 10111. Chỉ có 5 bit, nhưng máy tính lưu trữ số ở dạng 8,16,32,64 .. bit. Vì vậy, hãy thêm số XNUMX vào trước nhị phân. Nó sẽ không thay đổi giá trị ban đầu của số. Vì vậy nó sẽ trở thành 00010111.
- Như chúng ta đã biết, phần bù 1 có nghĩa là đổi tất cả 0 thành 1 và 1 thành 0, do đó thực hiện phần bù 1 trên 00010111 cho 11101000
Số bù 1 này được biểu thị bằng ký hiệu “~” này trong hầu hết các ngôn ngữ lập trình. Đặt ký hiệu này trước bất kỳ giá trị số nguyên hoặc giá trị dấu phẩy động nào sẽ cho phần bù 1.
Và số bù 2 có nghĩa là thêm số nhị phân “1” vào số bù 1. Nếu chúng ta thực hiện phép cộng 2 cho số trên:
- Nhị phân = 00010111
- Lời khen của 1 người = 11101000
- Lời khen của 2:
11101000
+ 1
11101001
Vì vậy, số bù 2 là 11101001. Đây là Hệ nhị phân cho -23.
Tóm lại, để thực hiện phép cộng 2 của số A, nó sẽ như sau:
Phần bù 2 của A = (~A) + 1
Bây giờ hãy giả sử A=8 (nhị phân 00001000), B=10(00001010)
Điều kiện 1: A = (A & B) + (A | B)
Nó tương đương với A = A + B.
A & B = 00001000 & 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Bây giờ, 00001000 + 00001010 = 00010010 (thập phân 18)
Vì vậy, A = 18
Điều kiện 2: B = A + (~B) + 1
Tương đương với B = AB
Ở đây, B = A – B
Từ những thảo luận trên, nếu chúng ta cần thực hiện phép toán contracĐể thực hiện phép tính này, ta lấy phần bù 2 của số âm rồi cộng vào.
Vì vậy, -B = ~B + 1
Bây giờ, B = 00010010 + (11110101) + 1 = 00001000
Giá trị của B tương đương với số thập phân 8, là giá trị ban đầu.
Điều kiện 3: A = A + (~B) + 1
Tương đương với A = AB
Bây giờ, A = 00010010 + 11110111 + 1
A = 00001010 (tương đương với số thập phân 10)
Cuối cùng, A nhận được giá trị của B. Như vậy, giao dịch hoán đổi đã hoàn tất.ping đã hoàn thành.
Chương trình bằng C/C++:
#include<stdio.h>
int main()
{
int a, b;
printf("Enter value of A: ");
scanf("%d", & a);
printf("Enter value of B: ");
scanf("%d", & b);
printf("A = %d, B = %d", a, b);
a = (a & b) + (a | b);
b = a + ~b + 1;
a = a + ~b + 1;
printf("\nNow, A = %d, B = %d", a, b);
}
Đầu ra:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Chương trình trong Python:
a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = (a & b) + (a | b)
b = a + ~b + 1
a = a + ~b + 1
print("Now, A = {} and B = {}".format(a, b))
Đầu ra:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Tràn số học là gì?
Thuật ngữ tràn có nghĩa là vượt quá giới hạn. Tràn số học có nghĩa là kết quả của bất kỳ phép tính số học nào vượt quá phạm vi hoặc giới hạn biểu diễn số của kiến trúc máy tính. Ví dụ, nếu một số được chia cho số không, nó sẽ trở thành vô hạn và hệ thống số máy tính không thể giữ nó trong 32 hoặc 64 bit.

Hậu quả của việc tràn số học có thể là:
- Phép cộng hai số dương trở thành số âm. Bởi vì bit dấu có thể trở thành 1, nghĩa là số âm.
- Phép cộng hai số âm trở thành số dương. Bởi vì bit dấu có thể trở thành 0, nghĩa là số dương.


