我在阅读别人的代码时遇到了很多旗帜,
if (condition1)
var1 = true
else
var1 = false
Run Code Online (Sandbox Code Playgroud)
然后,
if (var1 == true)
// do something.
Run Code Online (Sandbox Code Playgroud)
有很多像这样的旗帜.我很想知道,在代码中经常使用标志吗?
在我正在研究的一些代码中,我应该处理十个独立的参数,这些参数可以采用两个值中的一个(0或1).这会产生2 ^ 10个不同的条件.有些条件永远不会发生,可以省略,但那些确实发生的情况仍然很多,并且switch处理所有案件都是疯了.
我想使用10个if语句而不是巨大的语句switch.为此,我知道我应该使用标志位,或者更确切地说标记字节,因为语言是javascript,并且更容易使用10字节字符串来表示10位二进制.
现在,我的问题是,我不知道如何实现这一点.我已经看到这在APIs中使用,其中多个可选择的选项用数字1,2,4,8,...,n ^(n-1)公开,它们是1,10,100,1000等的十进制等值.在二进制.因此,如果我们进行调用bar = foo(7),bar将是一个具有三个最右边标志启用的任何选项的对象.
我可以将十进制数转换为二进制数,并在每个if语句中检查是否设置了相应的数字.但我想知道,有没有办法确定n-th十进制数字的数字是零或一二进制形式,而不实际进行转换?
我已经读过如果可以修改eflags第18位(AC - 对齐检查),你知道CPU是486或更新.在386上,该位抵抗修改.
我从这个站点解除了以下汇编代码并添加了详尽的注释(保留了奇怪的语法):
asm
mov bx,sx ; Save the stack pointer to bx (is sx a typo or a real register?).
and sp,$fffc ; Truncate the stack pointer to a 4-byte boundary.
pushfl ; Push the eflags register to the stack.
pop eax ; Pop it into eax.
mov ecx,eax ; Save the original eflags value into ecx.
xor eax,$40000 ; Flip bit 18 in eax.
push eax ; Push eax to the stack.
popfl ; Pop …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个扩展方法..
public static bool AllFlagsSet<T>(this T input, params T[] values) where T : struct, IConvertible
{
bool allSet = true;
int enumVal = input.ToInt32(null);
foreach (T itm in values)
{
int val = itm.ToInt32(null);
if (!((enumVal & val) == val))
{
allSet = false;
break;
}
}
return allSet;
}
Run Code Online (Sandbox Code Playgroud)
这对于我需要的目的非常有用,但是我现在需要创建一个具有相同签名的方法,该方法仅检查是否仅设置了这些值.
基本上是这样的.
public static bool OnlyTheseFlagsSet<T>(this T input, params T[] values) where T : struct, IConvertible
{
}
Run Code Online (Sandbox Code Playgroud)
我能想到这样做的唯一方法是通过获取所有可用的枚举值来检查设置并确认只提供了两个.
有没有其他方法可以使用某种按位运算来解决这个问题?
有谁知道如何在numpy中启用REFS_OK标志?我似乎无法在网上找到明确的解释。
我的代码是:
import sys
import string
import numpy as np
import pandas as pd
SNP_df = pd.read_csv('SNPs.txt',sep='\t',index_col = None ,header = None,nrows = 101)
output = open('100 SNPs.fa','a')
for i in SNP_df:
data = SNP_df[i]
data = np.array(data)
for j in np.nditer(data):
if j == 0:
output.write(("\n>%s\n")%(str(data(j))))
else:
output.write(data(j))
Run Code Online (Sandbox Code Playgroud)
我不断收到错误消息:迭代器操作数或请求的dtype保留引用,但未启用REFS_OK。
我无法解决如何启用REFS_OK标志,以便程序可以继续...
我试图检测Dropbox忙于在Mac OS X中更新用户Dropbox中的文件.通过在文件上运行stat(1)或stat(2),我看到用户定义的文件标志(st_flags)通常是0x40,但是当Dropbox更新文件时,它们会变为0x00几秒钟.
在我的桌面和其他文件夹中查看,我看到~95%的文件的标志值为0x00,但大约5%的文件的值为0x40.所以它可能不仅仅是Dropbox实现细节.我无法识别任何用于预测哪些文件具有0x40标志的模式.有谁知道这些值是什么意思?谁是定义它们的"用户"?
| =
我很想知道这个运算符,我已经看到在Java中设置标志时使用的这种表示法.
例如:
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Run Code Online (Sandbox Code Playgroud)
它是否执行某种位操作?
这个标记究竟做了什么?
还有其他众所周知的标志吗?
我使用python 3.4,pyQt5和Qt设计器(Winpython发行版).我喜欢由设计师制作guis并使用setupUi在python中导入它们的想法.我可以显示MainWindows和QDialogs.但是,现在我想设置我的MainWindow,总是在顶部,只有关闭按钮.我知道这可以通过设置Windows标志来完成.我尝试做如下:
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint)
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
MainWindow显示(没有错误)但不应用Flags.我想这是因为我要求在已经创建后更改Windows属性.现在,问题是:我怎么能直接修改Ui_MainWindow呢?可以在Qt设计器中更改标志吗?谢谢
我已成功使用CMake构建了一个共享库,但其大小并不是那么好.我已经尝试了几个编译标志来削减大小等.
set_source_files_properties(${TARGET_SOURCE_FILES} PROPERTIES COMPILE_FLAGS "-fexceptions")
Run Code Online (Sandbox Code Playgroud)
上面的代码用于打开单个文件的异常处理,而-fno-exceptions被添加到CMAKE_CXX_FLAG.它工作正常.
但是,我将相同的代码用于*.hpp以打开rtti,而将-fno-rtti添加到CMAKE_CXX_FLAGS.不幸的是,它没有用.
那么,有没有办法将COMPILE_FLAGS添加到CMAKE中的头文件?我在官方网站上观看过纪录片,但仍然没有线索.
flags ×10
algorithm ×1
alignment ×1
android ×1
assembly ×1
c# ×1
cmake ×1
compilation ×1
database ×1
dropbox ×1
java ×1
javascript ×1
macos ×1
mysql ×1
numpy ×1
pyqt5 ×1
python ×1
python-3.x ×1
qmainwindow ×1
qt-designer ×1
ref ×1
stat ×1
x86 ×1