2011-01-16 50 views
13

Tôi đã đọc các câu hỏi về Stack Overflow sau đây và tôi hiểu sự khác biệt giữa bitwise và logic.Khi nào tôi nên sử dụng toán tử bitwise?

Tuy nhiên, không ai trong số họ giải thích khi tôi nên sử dụng Bitwise hoặc logic.

Khi nào tôi nên sử dụng toán tử bitwise thay vì toán tử logic và ngược lại?

Trong trường hợp nào tôi cần phải so sánh từng chút một?

Tôi không hỏi về sự khác biệt, nhưng tôi hỏi tình huống khi bạn cần sử dụng toán tử bitwise.

+2

Một là hàm toán học, toán tử boolean kia. – mario

+0

Một cách sử dụng có thể tìm số lẻ: '$ number = [1, 2, 3, 4, 5]; foreach ($ number như $ num) {if ($ num & 1) {echo $ num. "là một số lẻ!
"; }}; ' – Ahmad

Trả lời

12

Bitwise |& và logic ||&&hoàn toàn khác nhau.

Các toán tử bitwise thực hiện các thao tác trên bit của hai số và trả lại kết quả. Điều đó có nghĩa nó không phải là có hay không. Nếu chúng được sử dụng trong các câu lệnh có điều kiện, chúng thường được sử dụng như một phần của các so sánh logic. Ví dụ:

if ($x & 2 == 2) { 
    // The 2^1 bit is set in the number $x 
} 

Toán tử logic so sánh hai (hoặc nhiều) điều kiện/biểu thức và trả về đúng hoặc sai. Bạn sử dụng chúng phổ biến nhất trong các câu lệnh có điều kiện, như ifwhile. Ví dụ:

if ($either_this || $or_this) { 
    // Either expression was true 
} 
3

Các toán tử bitwise hữu ích khi thao tác các bit của một số. Hãy xem here. Nếu không, bạn nên sử dụng toán tử logic. Ngoài ra các nhà khai thác hợp lý là ngắn mạch. Ví dụ: nếu bạn có a && bafalse, b không được đánh giá.

Tuyên bố từ chối trách nhiệm: Tôi đến từ một nền Java, nhưng tôi đoán trong PHP là như nhau.

5

Trong hầu hết các trường hợp, có thể bạn sẽ muốn sử dụng toán tử logic. Chúng được sử dụng để kết hợp các điều kiện logic, thường để kiểm soát luồng chương trình, ví dụ: ($isAlive && $wantsToEat).

Các toán tử bitwise được sử dụng khi bạn muốn thực hiện các thao tác theo từng bit dựa trên các biểu diễn nhị phân bên dưới của các số nguyên. ví dụ. (5 & 3) == 7. Như những người khác đã gợi ý, thường không có nhiều cuộc gọi cho điều này trong các loại ứng dụng có xu hướng để có được viết bằng PHP (mặc dù có trong các ngôn ngữ cấp thấp hơn, như C).

1

Chúng là hai toán tử rất khác nhau.

Khi bạn muốn hai điều kiện đồng thời là đúng, bạn sử dụng logic &&.Ví dụ: tôi muốn in "sinh nhật vui vẻ" chỉ khi sinh nhật của người đó là ngày hôm nay & & họ có tiền trong tài khoản. Điều này được sử dụng bất cứ khi nào chúng tôi muốn thực hiện thành phần của hai hoặc nhiều điều kiện, chủ yếu là trong báo cáo nếu và điều kiện vòng lặp (mặc dù không độc quyền).

Khi bạn muốn thực hiện các hoạt động bitwise (trong chương trình PHP hàng ngày hiếm hơn nhiều), bạn sử dụng bitwise &. Điều này hiếm hơn rất nhiều, và bạn có thể thực hiện mặt nạ bitwise (tôi nghi ngờ nó), vì vậy bạn chỉ có thể muốn một kết quả mà cả hai số nguyên đại diện, trong trường hợp này bạn có thể nói newAttribute = attribute1 & attribute2;.

0

Vâng, giả sử có $x = (false && some_function());, tại đây giá trị của $x sẽ được đặt mà không cần gọi số some_function() vì giá trị đầu tiên là FALSE.

Nhưng nếu bạn cần gọi hàm đó thì sao? Sử dụng $x = (false & some_function());.

Nói cách khác, các & sử dụng xử lý THÊM hơn & &, chỉ vì & & không chạy qua tất cả các giá trị để kiểm tra xem chúng. Nếu nó tìm thấy một giá trị là false, nó sẽ trả về giá trị đó, không nhìn vào các giá trị khác.

Và trong hoạt động hợp lý, sử dụng toán tử && như nó được sử dụng để trả về giá trị hoạt động hợp lý, nơi & được sử dụng để thiết lập một giá trị và trong một tuyên bố if nó sẽ luôn luôn trở thành sự thật.

5

Các toán tử bitwise được sử dụng cụ thể trong trường hợp biểu diễn giá trị nhị phân.

echo '0110011010' & '0101001001'; 
//0100001000 

Các toán tử logic được ưa thích nhất để so sánh và nhanh hơn một chút so với nhà điều hành Bitwise trong trường hợp ANDXOR hoạt động.

if(func1() && func2()) 

nếu func1() false trả nó sẽ không làm phiền gọi func2()

if(func1() & func2()) 

sẽ gọi cả hai chức năng không phân biệt giá trị trở lại của họ.

-1

Nếu bạn muốn biết thêm cách thức hoạt động kiểm tra trang web này:

http://www.bitwiseoperatorcalculator.com/

Đến từ PHP, tôi chưa bao giờ sử dụng nó trước nhưng chỉ đọc cho vui trang web này cung cấp cho lời giải thích đơn giản!

18

Bitwise rất hữu ích cho mọi thứ trong PHP giống như bất kỳ thứ gì khác.

Làm thế nào về một giá trị có thể có nhiều trạng thái được bật cùng một lúc (có thể quyền)?

<?php 

# must double them like this for it to work. 
const STATE_FOO = 1; 
const STATE_BAR = 2; 
const STATE_FEZ = 4; 
const STATE_BAZ = 8; 

# set state to foo and bar 
$state = STATE_FOO | STATE_FEZ; 

echo "What's the value: $state\n"; 
echo "Is foo state on? ".(bool)($state & STATE_FOO)."\n"; 
echo "Is bar state on? ".(bool)($state & STATE_BAR)."\n"; 
echo "Is fez state on? ".(bool)($state & STATE_FEZ)."\n"; 
echo "Is baz state on? ".(bool)($state & STATE_BAZ)."\n"; 
echo "Is foo and fez state on? ".($state == (STATE_FOO | STATE_FEZ))."\n"; 
Các vấn đề liên quan