What will be printed after execution of the following program code?
4 phương ánCó giải thích
#include <stdio.h>
int main() {
int a=12, b=5;
a=a^b;
b=a^b;
a=a^b;
printf("%d %d",a,b);
return 0;
}Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "5 12". Phép hoặc loại trừ theo bit tự nghịch đảo, nên ba lệnh liên tiếp đổi chỗ được hai giá trị mà không cần biến tạm. Theo từng bước: a bằng 12 là dãy bit 1100, b bằng 5 là 0101; lệnh thứ nhất cho a thành 1001 tức 9; lệnh thứ hai lấy 1001 với 0101 cho b thành 1100 tức 12, đúng giá trị ban đầu của a; lệnh thứ ba lấy 1001 với 1100 cho a thành 0101 tức 5, đúng giá trị ban đầu của b. Lệnh in xuất a là 5 rồi b là 12. Dãy "12 5" là hai giá trị ban đầu, tức giả định ba lệnh không làm gì. Dãy "9 5" dừng ở trạng thái ngay sau lệnh thứ nhất, lúc a đã thành 9 nhưng b chưa đổi. Dãy "12 9" ghép giá trị ban đầu của a với con số trung gian 9, không ứng với trạng thái nào sau khi cả ba lệnh chạy xong.
Cùng phần 2
Xuất hiện trong 1 bộ đề
Đi tiếp từ đây