Chủ đề của Introduction to Computer Science - CSI106

CSI106 - Phần 4: Phép toán trên dữ liệu

Khi dữ liệu đã nằm dưới dạng bit, thao tác trên nó trở thành thao tác logic. Phần này đi vào những phép toán tác động lên từng bit một và kỹ thuật dùng một dãy bit làm khuôn để bật, tắt hay đảo đúng các vị trí mình muốn mà không chạm vào phần còn lại — nền tảng của rất nhiều kỹ thuật trong lập trình hệ thống và xử lý mạng. Bên cạnh đó là phép dịch bit, các phép số học thực hiện trên từng quy ước biểu diễn số, và cách mô tả hành vi của mạch bằng bảng chân trị. Học xong, người học dựng được một khuôn bit cho yêu cầu cụ thể, lường trước kết quả của biểu thức nhiều toán tử, và hiểu phần cứng thực hiện phép cộng bằng cách nào.

Xem danh sách câu hỏi15 câu hỏi100% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

15Câu hỏi hiện có

Câu hỏi của chủ đề

15/15 câuHết danh sách
AOne place to the left
BOne place to the right
CTwo places to the left
DTwo places to the right
Lời giải
Đáp án đúng: "Two places to the left". Muốn cộng hai số viết dưới dạng dấu phẩy động thì hai số mũ phải bằng nhau, và quy tắc là kéo số mũ nhỏ lên cho bằng số mũ lớn. Ở đây số mũ nhỏ là 7, cần lên 9, tức tăng thêm 2; để giá trị của số không đổi thì phần định trị phải nhỏ đi một trăm lần, nghĩa là dấu phẩy dịch hai chỗ sang trái. Cách "One place to the left" đúng hướng nhưng chỉ bù được một đơn vị số mũ, hai số mũ vẫn còn lệch nhau một bậc. Cách "One place to the right" sai cả hướng lẫn số bước, vì dịch sang phải làm số mũ giảm còn 6 nên khoảng lệch rộng thêm. Cách "Two places to the right" đúng số bước nhưng ngược hướng, nó đưa số mũ từ 7 xuống 5 và càng xa 9.
Mở trang câu hỏi này →
A0000 1111
B1111 0000
C0101 1000
D1010 0000
Lời giải
Đáp án đúng: "0000 1111". Muốn xoá một số bit về 0 mà giữ nguyên các bit còn lại thì dùng phép AND với mặt nạ có bit 0 ở những chỗ cần xoá và bit 1 ở những chỗ cần giữ. Bốn bit trái nhất phải bị xoá nên mặt nạ mang 0000 ở nửa trái và 1111 ở nửa phải; kết quả 1010 0111 AND 0000 1111 bằng 0000 0111. Mục "1111 0000" làm điều ngược lại, nó giữ nửa trái và xoá nửa phải, cho ra 1010 0000. Mục "0101 1000" đặt bit 0 và 1 lẫn lộn ở cả hai nửa, AND với mẫu đã cho còn ra 0000 0000, mất luôn cả phần cần giữ. Mục "1010 0000" giữ đúng những bit đáng lẽ phải xoá và xoá những bit đáng lẽ phải giữ, cũng cho 1010 0000.
Mở trang câu hỏi này →
AAn operation involving multiple operands.
BAn operation that always results in zero.
CAn operation with a single operand.
DAn operation performed on two different data types.
Lời giải
Đáp án đúng: "An operation with a single operand." Bậc của một phép toán đếm số toán hạng nó cần, nên phép một toán hạng là phép chỉ tác động lên duy nhất một giá trị, ví dụ phép đảo bit hay phép lấy số đối. Mục "An operation involving multiple operands." mô tả phép hai toán hạng như cộng, trừ, AND, OR, hoặc phép ba toán hạng, tức ngược với nghĩa của phép một toán hạng. Mục "An operation that always results in zero." nói về giá trị kết quả, trong khi bậc của phép toán không liên quan gì tới việc kết quả bằng mấy. Mục "An operation performed on two different data types." vừa đếm hai toán hạng, vừa chuyển sang chuyện kiểu dữ liệu; chuyện kiểu dữ liệu thuộc quy tắc chuyển đổi khi tính, không định nghĩa bậc của phép toán.
Mở trang câu hỏi này →
4_______ is an arithmetic operation.4 lựa chọn
AThe exclusive OR
BThe unary NOT
CSubtraction
DThe binary AND
Lời giải
Đáp án đúng: "Subtraction". Phép trừ làm việc trên giá trị số của hai toán hạng và trả về một giá trị số, nên nó là phép toán số học; trong máy tính nó thường được thực hiện bằng cách cộng số thứ nhất với bù hai của số thứ hai, vì vậy chỉ cần một mạch cộng là đủ. Mục "The exclusive OR" là phép logic, nó xét từng cặp bit ở cùng vị trí và cho 1 khi hai bit khác nhau, không có nhớ sang vị trí bên cạnh. Mục "The unary NOT" cũng là phép logic, chỉ đảo từng bit của một toán hạng. Mục "The binary AND" là phép logic lấy giao từng bit, thường dùng để xoá bớt bit bằng mặt nạ. Dấu hiệu phân biệt là phép số học có nhớ lan giữa các vị trí bit, còn phép logic xử lý từng vị trí độc lập.
Mở trang câu hỏi này →
Amake a mask of all 0s and then AND the bit pattern and the mask.
Bmake a mask exactly the same as the bit pattern and then XOR the bit pattern and the mask.
CBoth a and b are correct
DBoth a and b are incorrect
Lời giải
Đáp án đúng: "Both a and b are correct". Mặt nạ toàn 0 đem AND với mẫu bit cho kết quả toàn 0, vì bit nào AND với 0 cũng ra 0; còn lấy mặt nạ y hệt mẫu bit rồi XOR thì mỗi cặp bit giống nhau cho 0, nên kết quả cũng toàn 0. Hai cách đều xoá sạch mọi bit, đó là lý do phương án gộp mới là đáp án thật chứ không phải phỏng đoán. "make a mask of all 0s and then AND the bit pattern and the mask." tự nó là một cách làm đúng, nhưng chọn riêng nó thì bỏ sót cách còn lại cũng cho kết quả như vậy. "make a mask exactly the same as the bit pattern and then XOR the bit pattern and the mask." cũng đúng và cũng không đầy đủ nếu chọn một mình. "Both a and b are incorrect" trái hẳn với hai phép tính vừa kiểm chứng ở trên.
Mở trang câu hỏi này →
AOR, then AND
BAND, then OR
CBoth at the same time
DDepends on the hardware
Lời giải
Đáp án đúng: "OR, then AND". Theo quy tắc ưu tiên thông thường của biểu thức logic thì AND có độ ưu tiên cao hơn OR, nhưng ở đây cặp ngoặc đã bao quanh phép OR nên nó buộc phải được tính trước, rồi kết quả của nó mới đem AND với toán hạng còn lại; đặt ngoặc chính là cách đảo lại thứ tự mặc định. "AND, then OR" đúng là thứ tự khi không có ngoặc, nhưng dấu ngoặc trong câu dẫn đã vô hiệu hoá thứ tự đó. "Both at the same time" không khớp với cách biểu thức được định giá: mỗi phép toán cần đầu vào đã có giá trị nên phải thực hiện tuần tự. "Depends on the hardware" sai vì thứ tự do cú pháp và dấu ngoặc quy định, không do mạch thực hiện phép toán quyết định.
Mở trang câu hỏi này →
A0
B1
CThe operation is not possible.
DThe result is undefined.
Lời giải
Đáp án đúng: "1". Phép hoặc loại trừ cho kết quả 1 khi hai bit đầu vào khác nhau và cho 0 khi chúng giống nhau, vì thế nó được dùng để kiểm tra hai mẫu bit có khác nhau không, để đảo bit chọn lọc bằng mặt nạ, hoặc để dò lỗi khi truyền. "0" sai vì giá trị này ứng với trường hợp hai bit bằng nhau, cùng là 0 hoặc cùng là 1. "The operation is not possible." sai vì đây là một phép toán logic cơ bản, mạch thực hiện nó có mặt trong mọi đơn vị số học và logic. "The result is undefined." sai vì bảng chân lý của phép này xác định đầy đủ cả bốn tổ hợp đầu vào, không có trường hợp nào bỏ trống hay nhập nhằng.
Mở trang câu hỏi này →
8Which is a unary operator?4 lựa chọn
AAND
BOR
CXOR
DNOT
Lời giải
Đáp án đúng: "NOT". Phép phủ định là phép một ngôi vì nó chỉ cần một toán hạng: đưa vào một bit hoặc một mẫu bit, kết quả là mẫu bit đã bị đảo từng bit một, 0 thành 1 và 1 thành 0. "AND" là phép hai ngôi, cần hai mẫu bit và cho 1 chỉ khi cả hai bit tương ứng đều là 1. "OR" cũng là phép hai ngôi, cho 1 khi ít nhất một trong hai bit là 1. "XOR" là phép hai ngôi, cho 1 khi hai bit tương ứng khác nhau. Dấu hiệu nhận biết nằm ở số toán hạng mà phép toán đòi hỏi, không nằm ở độ phức tạp của bảng chân lý.
Mở trang câu hỏi này →
ALogical right shift
BArithmetic right shift
CLogical left shift
DArithmetic left shift
Lời giải
Đáp án đúng: "Arithmetic right shift". Dịch phải số học đẩy mọi bit sang phải một vị trí nhưng giữ lại bit dấu bằng cách nhân bản nó vào chỗ trống bên trái, nên số âm vẫn còn âm; mỗi lần dịch tương đương chia cho 2 với phần dư bị bỏ đi. "Logical right shift" sai vì nó chèn bit 0 vào bên trái, biến một số âm dạng bù hai thành số dương rất lớn, tức phá mất dấu. "Logical left shift" sai vì dịch sang trái tương đương nhân với 2, đi ngược yêu cầu chia. "Arithmetic left shift" sai vì nó cũng là phép nhân với 2 chứ không phải chia, và còn có thể làm bit dấu bị đẩy ra ngoài gây tràn số, đổi hẳn dấu của kết quả.
Mở trang câu hỏi này →
AAs logical shifts and arithmetic shifts
BAs arithmetic and geometric shifts
CAs left shifts and right shifts
DAs integer shifts and floating-point shifts
Lời giải
Đáp án đúng: "As logical shifts and arithmetic shifts". Dịch bit được chia theo bản chất xử lý bit dấu: dịch logic coi mẫu bit là dãy bit thuần, đẩy đi rồi chèn 0 vào chỗ trống, dùng cho dữ liệu không dấu; dịch số học giữ bit dấu nguyên vẹn để kết quả còn đúng nghĩa với số có dấu. "As arithmetic and geometric shifts" sai vì không có loại dịch nào gọi là hình học, cặp khái niệm đó vay từ dãy số chứ không phải từ phép toán trên bit. "As left shifts and right shifts" sai vì trái và phải chỉ là hướng dịch, mà cả dịch logic lẫn dịch số học đều có hướng trái và hướng phải, nên đó không phải cách chia theo bản chất. "As integer shifts and floating-point shifts" sai vì phép dịch tác động trên mẫu bit, nó không được định nghĩa riêng cho kiểu nguyên hay kiểu thực.
Mở trang câu hỏi này →
A100
B111
C011
D101
Lời giải
Đáp án đúng: "100". Viết hai số bằng ba bit, 7 là 111 và 3 là 011, rồi lấy phép hoặc loại trừ theo từng cặp bit cùng vị trí: bit trái 1 với 0 cho 1, bit giữa 1 với 1 cho 0, bit phải 1 với 1 cho 0, nên kết quả là 100, tức số 4 trong hệ mười. Phương án "111" là chính số 7 và cũng là kết quả của phép hoặc giữa hai số này, nhưng phép hoặc loại trừ phải cho 0 ở những vị trí hai bit giống nhau. Phương án "011" là chính số 3 và là kết quả của phép và theo bit, không phải phép đang hỏi. Phương án "101" bằng 5, không ứng với phép toán bit nào giữa 7 và 3; nhìn vào từng vị trí bit cũng thấy không thể có bit 1 ở vị trí phải, vì hai số đều mang bit 1 ở đó.
Mở trang câu hỏi này →
A11101110
B11001110
C11111110
D10110110
Lời giải
Đáp án đúng: "11101110". Phép hoặc loại trừ xét từng cặp bit cùng vị trí và cho 1 khi hai bit khác nhau, cho 0 khi giống nhau. Xếp 11010011 lên trên 00111101 rồi đi từ trái sang phải: 1 với 0 cho 1, 1 với 0 cho 1, 0 với 1 cho 1, 1 với 1 cho 0, 0 với 1 cho 1, 0 với 1 cho 1, 1 với 0 cho 1, 1 với 1 cho 0, thu được 11101110. Phương án "11001110" lệch ở bit thứ ba, nơi hai bit vào là 0 và 1 nên phải cho 1. Phương án "11111110" lệch ở bit thứ tư, nơi hai bit vào đều là 1 nên phải cho 0. Phương án "10110110" sai ngay từ bit thứ hai và còn giống kết quả của một cách ghép bit khác, không phải phép đang hỏi.
Mở trang câu hỏi này →
A1110 0000
B0001 1111
C1110 0111
D0000 0111
Lời giải
Đáp án đúng: "1110 0000". Muốn bật ba bit ngoài cùng bên trái lên 1 mà không làm xáo trộn các bit còn lại, ta lấy mẫu gốc OR với một mặt nạ có đúng ba bit cao bằng 1 và năm bit thấp bằng 0, vì OR với 1 luôn cho 1 còn OR với 0 giữ nguyên bit cũ. Áp dụng với 1010 0111 thì kết quả là 1110 0111, đúng như mong muốn. Phương án "0001 1111" làm ngược: ba bit cao bằng 0 nên không bật được chúng, trong khi năm bit thấp lại bị ép thành 1. Phương án "1110 0111" có ba bit cao đúng nhưng ba bit thấp bằng 1 sẽ bật thêm những bit đáng ra phải để nguyên, nên nó là kết quả chứ không phải mặt nạ. Phương án "0000 0111" chỉ tác động vào ba bit thấp và không chạm tới ba bit cao cần bật.
Mở trang câu hỏi này →
AOperations that change the data type of a bit pattern.
BOperations that apply the same basic operation on individual bits of a pattern, or on two corresponding bits in two patterns.
COperations that physically move bit patterns between memory locations.
DOperations that perform mathematical calculations on entire bit patterns as a whole
Lời giải
Đáp án đúng: "Operations that apply the same basic operation on individual bits of a pattern, or on two corresponding bits in two patterns.". Các phép logic như NOT, AND, OR, XOR làm việc ở mức từng bit: NOT đảo mỗi bit của một mẫu, còn AND, OR, XOR ghép từng cặp bit cùng vị trí của hai mẫu, và kết quả tại một vị trí không phụ thuộc các vị trí khác. Phương án "Operations that change the data type of a bit pattern." nói về việc diễn giải lại mẫu bit ở mức ngôn ngữ lập trình, không phải một phép tính trên bit. Phương án "Operations that physically move bit patterns between memory locations." mô tả các lệnh nạp và chuyển dữ liệu, chúng dịch chuyển nội dung chứ không biến đổi nó. Phương án "Operations that perform mathematical calculations on entire bit patterns as a whole" là phép số học: nó coi mẫu bit như một con số và có nhớ lan từ bit thấp lên bit cao, khác hẳn tính độc lập theo từng bit của phép logic.
Mở trang câu hỏi này →
AThe left shift operation is used to divide an integer by two
BThe right shift operation is used to multiply an integer by two
CThe left shift operation is used to multiply an integer by two
DNone of the other options are correct
Lời giải
Đáp án đúng: "The left shift operation is used to multiply an integer by two". Trong biểu diễn nhị phân, trọng số của mỗi vị trí là một lũy thừa của hai, nên dịch toàn bộ mẫu bit sang trái một vị trí và thêm 0 vào bên phải sẽ làm mỗi bit mang trọng số gấp đôi, tức giá trị của số nhân hai, miễn là không bị tràn. Phương án "The left shift operation is used to divide an integer by two" nhận đúng phép dịch nhưng gán sai tác dụng, vì dịch trái làm số lớn lên chứ không nhỏ đi. Phương án "The right shift operation is used to multiply an integer by two" cũng lộn chiều: dịch phải hạ trọng số của từng bit, nên tương ứng với phép chia hai, và bit bị đẩy ra ngoài chính là phần dư bị bỏ. Phương án "None of the other options are correct" không thể chọn, vì đã có một phát biểu nêu đúng quan hệ giữa dịch trái và phép nhân hai.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

6 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.