30/09/2018, 16:02
Poll: Kiểm tra kiến thức C - 1.16
Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/11
16.What will be the output of the program?
#include<stdio.h>
int main()
{
char c=48;
int i, mask=01;
for(i=1; i<=5; i++)
{
printf("%c", c|mask);
mask = mask<<1;
}
return 0;
}
- A. 12400
- B. 12480
- C. 12500
- D. 12556
Bài liên quan
@ltd help
những bài này khó thật đấy. Ngồi nhìn miết k ra đc
110000 | 000001 ==> 110001 ==> 49(1)
110000 | 000010 ==> 110010 ==> 50(2)
110000 | 000100 ==> 110100 ==> 52(4)
110000 | 001000 ==> 111000 ==> 56(8)
110000 | 010000 ==>1000000 ==> tràn số, quay về lại số 0
==> đáp án là 12480. Độ chính xác của bài này là 90% còn cái tràn số không dám chắc
@Dung_Kon tính khiếp quá, cái này a bỏ vào IDE compile chạy xẹt xẹt chứ không tính. Giờ già rồi lười suy nghĩ mấy cái này.
À hay @Dung_Kon làm một bài hướng dẫn cách tính các phép toán này trên nhị phân đi?
Em dốt mấy cái này lắm anh ơi, trả qua thấy người ta hỏi thì trả lời thôi. Đợi thời gian nữa trình lên đã chứ viết bừa mấy bạn hiểu sai, hiểu lầm nữa thì toi
Chọn B. 12480
Số 48 = 32 + 16 hệ cơ số 10 đổi sang hệ cơ số 2: các vị trí lần lượt là: 2^5; 2^4; 2^3; 2^2; 2^1; 2^0
2^5 = 32 tại vị trí này hệ cơ số 2 có giá trị bằng 1, các chỗ khác có giá trị bằng 0
2^4 = 16 tương tự như trên, do đó ta được dãy số hệ 2 là: 0011 0000 (8 bits, 2 nhóm 4)
Số 01 hệ cơ số 10 đổi sang hệ cơ số 2: 0000 0001
Các phép toán bit của số nguyên:
1|1 = 1; 1|0 = 1; 0|1 = 1; 0|0 = 0
X << Y đẩy y bit của x sang trái và điền các trị 0 vào chỗ các bit đã dịch chuyển đi.
Phép | thực hiện hai số hệ cơ số 2 theo từng cột tương ứng.
1: 0011 0000 | 0000 0001 = 0011 0001; 0000 0001 << 1 = 0000 0010
2: 0011 0000 | 0000 0010 = 0011 0010; 0000 0010 << 1 = 0000 0100
3: 0011 0000 | 0000 0100 = 0011 0100; 0000 0100 << 1 = 0000 1000
4: 0011 0000 | 0000 1000 = 0011 1000; 0000 1000 << 1 = 0001 0000
5: 0011 0000 | 0001 0000 = 0011 0000; 0001 0000 << 1 = 0010 0000
Phép dời sang trái hệ cơ số 2 số mũ tăng một đơn vị 2^0; 2^1; 2^2; 2^3 … 1; 2; 4; 8 … và giá trị tăng 10 lần 0000 0010; 0000 0100; 0000 1000; 0001 0000 …
printf %c: từ số thứ tự ASCII in ký tự
Đổi số từ hệ 2 sang hệ 10: 0011 0001 = 22^7 + 02^6 + 02^5 + 02^4 + 02^3 + 02^2 + 02^1 + 02^0 = 0 + 0 + 32 + 16 + 0 + 0 + 0 + 1
0011 0001 = 49 ký tự số 1
0011 0010 = 50 ký tự số 2
0011 0100 = 52 ký tự số 4
0011 0000 = 56 ký tự số 8
0011 1000 = 48 ký tự số 0
Các phím ở bàn phím số.
Phép | Or Logic không tăng giá trị khác với kết quả tăng từ 1, 2, 4, 8 và rồi giảm xuống 0
Phép << Dời sang trái giá trị mới tăng 1, 2, 4, 8 …
Just reference.
Phương tính cái này kinh quá, chuẩn Cảm ơn Phương đã giải thích cho mọi người nhé.
thank @phuongle71104 nhé, mình không chắc đáp án, cảm ơn bạn