2010-07-27 23 views
5

Khi tôi đang cố gắng học hỏi từ một chương trình hiện có, tôi không thể hiểu được hai dòng mã sau đây sẽ làm gì?các chức năng của hai dòng mã

for(i=0;0==(x&1);++i)x>>=1; 


if(0==(x-=y)) return y<<i; 

Mọi giải thích sẽ được đánh giá cao.

+0

Chức năng sẽ trả về nếu điều kiện không được đáp ứng? –

Trả lời

9
for(i=0;0==(x&1);++i)x>>=1 

Finds bit trọng số thấp nhất thiết lập để 1 trong một số nguyên

if(0==(x-=y)) return y<<i; 

trừ y từ x, và nếu kết quả là 0, trả y chuyển trên (về phía các bit quan trọng hơn) bởi i bit.

+1

Bit đầu tiên là bit ít quan trọng nhất (ngoài cùng bên phải) –

4

for(i=0;0==(x&1);++i)x>>=1;

Mã này x>>=1 đang chuyển các bit của x bên phải một nơi. Điều này sẽ tiếp tục miễn là 0==(x&1) là đúng, có nghĩa là bit bên phải nhất của x là 0. i là số bit được dịch chuyển.

if(0==(x-=y)) return y<<i;

Mã này trừ y từ x. Sau đó, nếu x là 0, mã trả về y được dịch sang trái bằng i bit.

0

Đây có phải là câu hỏi phỏng vấn không?

Các nhà điều hành < < và >> cũng như & cũng là tất cả các hoạt động bitwise.

Bề ngoài, hình ảnh đầu tiên dường như chuyển sang phải cho đến khi tìm thấy 1 bit nhưng lại phá hoại.

Loại khác hoàn toàn bị thuyết phục.

Tuy nhiên, không có nhiều ngữ cảnh thì không rõ chương trình đang cố gắng làm gì.

0

Sẽ trả lại x nếu xy trái đã chuyển một số không xác định i số vị trí.

Tức là, nếu x = 01010000y = 00000101 nó sẽ trả lại x. Không có thông tin trong câu hỏi để đoán những gì nó sẽ trở lại nếu điều kiện không được đáp ứng.

Các vấn đề liên quan