虽然我掌握了Bitwise Operators的概念,但我不能说在Web开发过程中我遇到了很多用例,我不得不求助于使用Bitwise Operators.
请记住,此问题专门用于在Web语言中使用Bitwise Operators.
tyl*_*ler 83
我将在这里更明确,因为我认为按位掩码是一个伟大的工具,应该在任何开发带.我将尝试扩展上面的答案.首先,使用整数来维护状态标志的示例(常见用法):
// These are my masks
private static final int MASK_DID_HOMEWORK = 0x0001;
private static final int MASK_ATE_DINNER = 0x0002;
private static final int MASK_SLEPT_WELL = 0x0004;
// This is my current state
private int m_nCurState;
Run Code Online (Sandbox Code Playgroud)
要设置我的状态,我使用按位OR运算符:
// Set state for'ate dinner' and 'slept well' to 'on'
m_nCurState = m_nCurState | (MASK_ATE_DINNER | MASK_SLEPT_WELL);
Run Code Online (Sandbox Code Playgroud)
注意我'或'我目前处于与我想要打开的状态的状态.谁知道我现在的状态是什么,我不想把它吹走.
要取消设置状态,我使用带有补码运算符的按位AND运算符:
// Turn off the 'ate dinner' flag
m_nCurState = (m_nCurState & ~MASK_ATE_DINNER);
Run Code Online (Sandbox Code Playgroud)
要检查我当前的状态,我使用AND运算符:
// Check if I did my homework
if (0 != (m_nCurState & MASK_DID_HOMEWORK)) {
// yep
} else {
// nope...
}
Run Code Online (Sandbox Code Playgroud)
为什么我认为这很有趣?假设我正在设计一个设置我的状态的界面.我可以写一个接受三个布尔值的方法:
void setState( boolean bDidHomework, boolean bAteDinner, boolean bSleptWell);
Run Code Online (Sandbox Code Playgroud)
或者,我可以使用单个数字来表示所有三个状态并传递单个值:
void setState( int nStateBits);
Run Code Online (Sandbox Code Playgroud)
如果您选择第二种模式,那么在决定添加另一种状态时您会非常高兴 - 您不必破坏现有的界面.
我的两分钱.谢谢.
Jon*_*eet 52
我对位运算符的主要用途可能是任何地方都相关 - 表示一组标志.例如,您可能在数据库中有一个整数,表示用户的一组安全权限,在您的Web应用程序中,您必须在继续之前检查这些权限.
那些往往只需要&和|- 例如
if ((permissions & Permission.CreateUser) != 0)
{
...
}
Run Code Online (Sandbox Code Playgroud)
要么
Permission requiredPermission = Permission.CreateUser
| Permission.ChangePassword;
Run Code Online (Sandbox Code Playgroud)
位转移运营商都在我的经验,"企业"应用程序的那么有用.
小智 12
对于Java程序员,xor位运算符(^)提供了一种有用的方法来编写两个布尔值之间的异或测试.例:
boolean isFoo = ...
boolean isBar = ...
if (isFoo ^ isBar) {
// Either isFoo is true or isBar is true, but not both.
Run Code Online (Sandbox Code Playgroud)
注意:这里没有实际的位操作,但它是使用xor位运算符(在Web层或其他任何位置)的有用方法.
(同样可能适用于C#,因为它与Java非常相似.但不确定.)
这个问题已经回答了,但我想与大家分享一下我的经验&.
我在&不久前用过一段时间来验证一个注册表单,当我进行ASP.NET C#练习时,短路&&不能轻易达到预期的效果.
我想要做的是突出显示表单中的所有无效字段,并在每个无效字段旁边显示错误消息标签,并取消所有有效字段的高亮显示并从中删除错误消息.
我用它的代码是这样的:
protected void btnSubmitClicked(...) {
username = txtUsername.Text;
email = txtEmail.Text;
pass = txtPassword.Text;
if (isUsernameValid(username) & isEmailValid(email) & isPasswordValid(pass)) {
// form is valid
} else {
// form is invalid
}
...
}
private bool isPasswordValid(string password) {
bool valid = true;
string msg = "";
if (password.length < MIN_PASSWORD_SIZE) {
valid = false;
msg = "Password must be at least " + MIN_PASSWORD_SIZE + " long.";
}
highlightField(txtPassword, lblPassword, valid, msg);
return valid;
}
private void highlightField(WebControl field, Label label, string valid, string msg) {
if (isValid) {
// de-highlight
field.BorderColor = VALID_FIELD_COLOR;
} else {
// highlight the text field and focus on it
field.BorderColor = INVALID_FIELD_COLOR;
field.Focus();
}
label.Text = msg;
}
// and other similar functions for username and email
Run Code Online (Sandbox Code Playgroud)
如果我使用&&而不是&,方法中的if语句btnSubmitClicked将仅突出显示第一个无效字段,之后的所有其他无效字段将不会突出显示并且其错误消息未显示,因为短路&&将停止检查条件之后遇到错误.
可能有更好的方法来实现同样的目标,但我觉得&当时很有用.