Câu hỏi Bitwise Flags bị bỏ rơi? [đã đóng]


Tôi đã nhận thấy rằng rất nhiều dự án mã nguồn mở không sử dụng cờ BITWISE nữa, ngay cả khi nó được hỗ trợ đầy đủ bởi môi trường lập trình chung cho web (php / Mysql). Đó là một "thực hành bị mất" cho một số vấn đề hiệu quả, hoặc chỉ là rất nhiều lập trình viên php không biết làm thế nào để xử lý kiểu triển khai này?

Không có gì quá quan trọng, chỉ rất tò mò :) cảm ơn tất cả các bạn


20
2017-10-22 08:04


gốc




Các câu trả lời:


Tôi sẽ dính cổ của tôi ra và nói rằng mọi vị trí kỹ thuật đòi hỏi một sự hiểu biết âm thanh của các hoạt động bitwise.

Và tôi có một giai thoại gián tiếp đề cập đến chủ đề.

Tháng 1 năm 2007 tôi ở Cochin, Ấn Độ, tuyển dụng nhân viên phát triển lâu dài. Vì tôi không tham gia vào việc sàng lọc sơ bộ các ứng cử viên nên tôi không biết tiêu chuẩn mong đợi nên tôi đã chuẩn bị một loạt các câu hỏi và chủ đề từ sự hiểu biết đơn giản về nhị phân và thập lục phân đến kiến ​​trúc, thiết kế và quản lý dự án.

Khi tôi thảo luận về cách tiếp cận của tôi với anh chàng nhân sự người Ấn Độ, tôi (nhẹ nhàng) chửi thề khi ném bóng quá thấp. Ông đã nói rõ rằng các câu hỏi của tôi về hex có thể được hiểu là một sự xúc phạm đến kinh nghiệm ứng viên hoặc giáo dục.

Nhưng kinh nghiệm phỏng vấn hàng trăm ứng cử viên của tôi ở Anh đã cố định trong tôi một niềm tin rằng nó không thể hạ thấp quá. Ý kiến ​​của tôi là vẫn còn rằng nếu nó trở nên rõ ràng một ứng cử viên là đủ điều kiện thì nó đơn giản và dễ dàng để điều chỉnh mức độ thảo luận. Tôi chưa bao giờ có ai bày tỏ cảm giác bị sỉ nhục, trái lại tôi nghĩ một ứng cử viên đủ điều kiện có thể cảm thấy nhẹ nhõm khi bắt đầu cuộc phỏng vấn. Nó cũng giúp phá băng và xây dựng mối quan hệ cần thiết cho một cuộc phỏng vấn có ý nghĩa. Mặt khác, các ứng cử viên không đủ điều kiện thường rơi vào những rào cản thấp hơn.

Nhưng không muốn hoàn toàn phớt lờ lời khuyên của địa phương, tôi thận trọng quyết định đưa vào các chủ đề phỏng vấn cơ bản của mình, và khá sẵn sàng từ bỏ họ nếu họ không làm việc.

Khi các cuộc phỏng vấn diễn ra, tôi rất vui vì tôi đã bắt đầu ở cấp độ đó. Nó không xúc phạm bất cứ ai, và các ứng cử viên không phù hợp được dễ dàng xác định.

Đây không phải là để nói rằng tôi mong đợi các ứng cử viên để đối phó với bit-twiddling ngày này sang ngày khác, nhưng bất cứ điều gì ngôn ngữ một sự hiểu biết âm thanh của các nguyên tắc cơ bản của lập trình là điều cần thiết. Ngay cả các nhà phát triển ở mức trừu tượng cao hơn cũng được tiếp xúc với hex một cách thường xuyên (ví dụ như các giá trị RGB). Parroting những thứ bạn tìm thấy trên mạng sẽ chỉ giúp mức độ mà mọi thứ hoạt động hoàn hảo lần đầu tiên.

Nhưng đối với các nhà phát triển bắt đầu trong năm năm qua, tôi tin rằng tất cả đều quá dễ dàng để tìm hiểu các nguyên tắc cơ bản, được cung cấp bởi các IDE có chủ ý tốt và meme về lập trình "không mã hóa". Visual Studio cài đặt màn hình spash tự hào về phát triển mà không cần viết mã. Thật, Visual Studio làm hỏng tâm trí?


13
2017-10-22 08:47



Một giai thoại thú vị, nhưng tôi không thấy cách này trả lời câu hỏi. - Cory House


Rất nhiều lập trình viên trong những ngày này dường như chỉ có những cái đầu đầy đủ kiến ​​thức để mã hóa sức mạnh và sau đó được gửi vào lực lượng lao động mà không được dạy những từ như "bitwise".

Đó là một nghệ thuật sắp chết, tôi nói với bạn ...


12
2017-10-22 08:09



Tôi thấy không có sự biện minh mạch lạc. Vâng, đây là một kỹ năng phổ biến / có xu hướng giảm dần, nhưng điều này không trả lời được câu hỏi. - Cory House


Các hoạt động bitwise không chỉ là về bảo tồn bộ nhớ. Chúng thực sự hữu ích cho việc viết mã rõ ràng. Mà bạn muốn thấy?

OpenFile("...", true, false)

hoặc là

OpenFile("...", writeonly | append)

Đó là một ví dụ vô nghĩa / tầm thường, nhưng bạn có ý tưởng.


10
2017-10-22 11:14



Tôi thà nhìn thấy đầu tiên, với các popups tài liệu mã. Thứ hai có vẻ mơ hồ hơn. - Petah
Với thứ hai, không cần phải nhớ thứ tự của các tùy chọn, không có sự gia tăng về số lượng các tham số mà hàm phải hỗ trợ và lời gọi là tự tạo tài liệu. - Stoutie


Nếu bạn có một ứng dụng đã được phức tạp, tại sao bạn sẽ làm cho nó phức tạp hơn bằng cách sử dụng cờ bitwise. Cá nhân tôi sẽ không sử dụng những lá cờ kiểu này nếu không có thêm bất kỳ sự an toàn nào nữa, sau đó sẽ trở nên tuyệt vời. Và ngoài kinh nghiệm, viết nó là khá dễ dàng, điều chỉnh nó sau này là khó khăn hơn, hãy để một mình nếu bạn đã không viết nó cho mình.

Oh và để thu âm, tôi biết cách sử dụng chúng.


7
2017-10-22 08:25



Tôi đồng ý, họ chỉ là khó khăn hơn, khi bộ nhớ là đắt tiền họ có ý nghĩa. Bây giờ bộ nhớ là rẻ, và băng thông nhanh hơn không có điểm.
Tuy nhiên mọi nhà phát triển đều phải biết cờ bitwise là gì, trong trường hợp anh ta phải đối phó với họ (tức là mã di sản hoặc giao tiếp phần cứng). Có vẻ như nhiều nhà phát triển đang thực sự thiếu nó. - OregonGhost
Vâng, tôi hoàn toàn đồng ý ở đó, nhưng bởi vì ai đó không sử dụng một kỹ thuật cụ thể không nhất thiết có nghĩa là anh ấy không biết hoặc không biết. - Johnny


Bên ngoài chương trình nhúng nơi quản lý bộ nhớ rất quan trọng, chi phí của chúng vượt quá giá trị tối thiểu của chúng. Đặc biệt, việc truy vấn các cột db có chứa các cờ bitwise tạo ra SQL khó hiểu đòi hỏi phải tham chiếu mã của ứng dụng chỉ để xác định giá trị của mỗi tham chiếu hoạt động bitwise.

WHERE (ISNULL(flags, 0) & 4096 = 0 -- What does this bit refer to? 

Nếu phải truy vấn DB của bạn theo cách này không làm bạn sợ, nó phải như vậy.


3
2018-06-24 21:01



Thật vậy, các giá trị là một mối phiền toái đối với kỹ sư đảo ngược. Tôi có vấn đề này khi nhìn thấy lỗi php báo cáo giá trị trong cấu hình apache! - Stoutie
Bit này của SQL trông quen thuộc ... - Jesse C. Slicer
Ha! Hey Jesse - Thế giới nhỏ mà ya đã thấy điều này! - Cory House


Bitfields rất hữu ích nếu bạn có yêu cầu về bộ nhớ và tốc độ rất chặt chẽ, hoặc khi thực hiện lập trình phần cứng mức thấp.

Trừ khi bạn đang làm chương trình nhúng hoặc một cái gì đó tương tự, bạn không cần chúng. Có nhiều cơ chế dễ đọc hơn, mạnh mẽ hơn, có thể mở rộng để thực hiện nhiệm vụ tương tự. Ví dụ, EnumSets của Java.

Tôi hy vọng một lập trình viên giỏi sẽ biết họ và không sử dụng chúng :-p


2
2017-10-22 09:34





"Rất nhiều" là khá chung chung, chúng tôi muốn tên! ;-)

Nghiêm túc, tôi đến từ ngôn ngữ lắp ráp và C, và tôi khá thành thạo với các hoạt động bitwise. Nhưng tôi sẽ không sử dụng chúng để thay thế, nói 10 booleans không liên quan trong một lớp với cờ nhị phân trong một số nguyên ... Trừ khi, có lẽ, tôi có hàng triệu trường hợp của lớp này!

Tôi có nên phải thao tác rất nhiều thể hiện của boolean, tôi sẽ sử dụng một số lớp bitet, để tối ưu hóa và trừu tượng đi những mảng bit.

Bây giờ, thao tác bit là gần như bắt buộc trong lập trình, nếu bạn muốn truy cập vào các thành phần của các giá trị RGB [A], nếu bạn muốn gọi một số API (ngay cả khi đó chỉ là ORing một số cờ được đặt tên), v.v.

Tóm lại, tôi sẽ không sử dụng nó trong mọi dự án tôi làm, nhưng bạn không thể bỏ qua cách thực hiện nó (một chút như regexes ...).


2
2017-10-22 10:53





Tôi vẫn sử dụng các toán tử bitwise, mặc dù ngôn ngữ chính của tôi là sự lựa chọn (và chuyên nghiệp) là C # Tôi thường sử dụng Flag enums cho nó :) Nhưng yeah, tôi nghĩ rất nhiều người viết mã như PHP tự học và không biết về hoạt động bitwise hoặc tập quán của chúng.

Tự dạy mình, tôi không biết nhiều về chúng cho đến khi tôi bắt đầu viết mã C và C ++. Bây giờ tôi sử dụng chúng ở nơi chúng có ý nghĩa :)


0
2017-10-22 08:17



Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - Ilija Dimov
@IlijaDimov Không có hành vi phạm tội, nhưng câu trả lời này đã được viết gần 7 năm trước đây, khi mọi thứ có một chút khác nhau về tràn ngăn xếp. Nhận xét bạn đã bỏ qua là không bắt buộc. - Sekhat
Câu trả lời này đã xuất hiện trong hàng đợi đánh giá Bài đăng chất lượng thấp một vài ngày trước. Tôi đã đánh dấu nó không phải là câu trả lời dựa trên các quy tắc hiện tại cho câu trả lời hay và nhận xét đó tự động xuất hiện. - Ilija Dimov


Họ luôn luôn có một nơi để lưu trữ rất nhiều cờ boolean trong một số lượng nhỏ của không gian;

Chỉ cần nghĩ rằng nếu bạn có 32 lá cờ (ví dụ); Bạn có thể lưu trữ tất cả trong một "số nguyên dài" và chỉ sử dụng hết 4 byte, Bây giờ hãy tưởng tượng bạn đã chọn sử dụng dài cho mỗi cờ (chỉ vì mã dễ bảo trì hơn - bây giờ bạn có 128 byte để xử lý.

Nền của tôi chủ yếu là C / C ++ vì vậy tôi đã được đưa lên chúng vì vậy tôi chắc chắn sử dụng chúng trong mọi ngôn ngữ tôi sử dụng; nhưng tôi đồng ý; lập trình viên mới có xu hướng thậm chí không quan tâm - tất cả bộ nhớ này nằm xung quanh - ai quan tâm?


0
2017-10-22 09:54