首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用EnumSet代替位运算简化代码逻辑

位运算 在Review代码时候,看到一段涉及到USB的逻辑代码,他是这样写的 private boolean isUsbConnected; private boolean isUsbModeNCM;...简化了代码,增加代码可读性,并且使代码更加稳定。 进阶!使用EnumSet替代位运算 到这里你可能觉得问题解决了就完了,但是还没有!...但位域有着int枚举常量所有的缺点,甚至更多。当位域以数字形式打印时,翻译位域比翻译简单的int枚举常量要困难很多。甚至要遍历位域表示的所有元素也没有很容易的方法。...内部实现上,每个EnumSet内容都表示为位矢量,一般(低于64个元素)整个EnumSet就是用一个long的位运算来表示的。...也就是说它替你使用位算法实现了这一切,避免你自己写位运算导致代码难读懂的情况。 下面是用EnumSet修改后的示例代码,它更加简短,清楚也更安全。

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Z3Py在CTF逆向中的运用

    Z3求解器能够求解任意多项式,但是要注意的是,当方程的方式为2**x这种次方运算的时候,方程式已经不是多项式的范畴了,Z3便无法求解。...但是现实中很多的逆向题都是基于位运算的,同样在Z3Py中可以使用Bit_Vectors进行机器运算。它们能够实现无符号和有符号二进制运算。...Z3为符号数运算提供了一个特殊的运算符操作版本,其中运算符,> =,/,%和>>对应于有符号运算。 相应的无符号运算符是ULT,ULE,UGT,UGE,UDiv,URem和LShR。...第八届极客大挑战的REConvolution 我们打开文件,也是比较直观的看到约束条件,我试着逆向了这个过程,花费了挺多的时间才得到答案,但是如果我们使用Z3Py来求解的话就会非常的快。...很简单的几行代码,声明0x22个8位BitVec的未知数,获取数据,然后增加约束条件,求解,这样就能够帮助我们获取flag。

    1.5K20

    Z3prover 学习记录

    函数的使用方式与编程语言不同:编程语言通过(x1,x2,x3)方式传参,而z3将函数视为一个运算符号通过类似三地址码的方式传参 —— 函数符号 x1 x2 x3 输出: sat (model ;;...算数运算 基本运算 z3内置了对于整数和实数等数学类型的支持,而且貌似最新版已经合并了原先的插件——z3str,可以进行字符串处理,关于这部分文档似乎没有详细说明... declare-const可以用于声明整数和实数常量...)的实数运算时称为非线性式,这种式子求解极其困难,导致z3在求解非线性问题的时候不一定总能确定是否有解。...z3支持除法、求模和求余运算,这些运算在底层都会被映射成乘法。...assert (= b 0.0)) (check-sat) 关于ite语句: 其实就是if-then-else语句,其结构为(if 条件 真返回值 假返回值) 此处判断被除数是否为0来返回不同结果 位向量

    1.3K30

    CORDIC算法详解(六)- CORDIC 算法的硬件实现

    图中 sgn(yi) 和 sgn(zi)分别表示yi和zi的符号位即最高位, 根据工作模式( 旋转模式还是向量模式) 的不同, 选择其中之一赋给di( 这里di为 1或者 0)。...旋转模式加法器的控制端来自于 zi 的符号位, 向量模式则来自于yi的符号位。...这里需要注意的是,我们在进行迭代运算的时候,将2^-i变成移位运算,对于正余弦来说是有正负的,所以在一开始定义的时候,就应该定义成有符号数,Verilog中也可以定义有符号数,最高位表示符号位。   ...例如1010_1010, []是添加的位    逻辑左移一位:0101_010[0]    算数左移一位:0101_010[0]    逻辑右移一位:[0]101_0101    算数右移一位:[1]101..._0101   迭代运算采用16级流水线,进行运算,最终需要判断输出的正余弦值在哪个象限,前面讲旋转角度θ的范围为[-99.7,99.7],不在这个范围我们要进行三角运算使其满足这个范围,当输入的角度小于

    5K32

    秒秒钟揪出张量形状错误,这个工具能防止ML模型训练白忙一场

    函擎 发自 凹非寺 量子位 报道 | 公众号 QbitAI 模型吭哧吭哧训练了半天,结果发现张量形状定义错了,这一定没少让你抓狂吧。 那么针对这种情况,是否存在较好的解决方法呢?...神经网络涉及到一系列的矩阵计算,前面矩阵的列数必需匹配后面矩阵的行数,如果维度不匹配,那后面的运算就都无法运行了。...上图代码就是一个典型的张量形状错误,[B x 120] * [80 x 10]无法进行矩阵运算。...离线分析 Z3/Python:如果线上分析没有问题,PyTea将收集到的约束条件传给SMT(Satisfiability Modulo Theories)求解器 Z3,求解器负责查看每条路径的约束条件是否都能被满足...PyTea给出的答案是,如果该前馈函数不改变全局值,并且它的输出值不受分支条件影响,对于每条路径都是相等的,我们就可以忽略许多完全一致的路径,来节约计算资源。

    52340

    专为现代AI计算打造?IBM AIU芯片解析:5nm制程,32核心,230亿个晶体管!

    答案是:“近似计算”+“简化人工智能工作流程”。 拥抱低精度,采用近似计算 从历史上看,很多AI计算依赖于高精度 64 位和 32 位浮点运算。IBM 认为AI计算并不总是需要这种精确度。...答案是,包括这些示例在内的许多任务都可以通过近似计算来完成。” 基于此,IBM 首创了的一种称为近似计算的技术,可以从32位浮点运算下降到包含四分之一信息的混合8位浮点(HFP8) 计算格式。...这种简化的格式极大地减少了训练和运行 AI 模型所需的数字运算量,并且不会牺牲准确性。 更精简的位格式还减少了另一个对速度的拖累:只需将更少的数据移入和移出内存,即运行AI模型对于内存的占用更少了。...AIU使用混合 8 位浮点 (HFP8) 计算,而不是通常用于 AI 训练的32位浮点或16位浮点运算。较低精度的计算使芯片的运行速度比 FP16 计算快 2 倍,同时提供类似的训练结果。...简化人工智能工作流程 由于大多数 AI 计算都涉及矩阵和向量乘法,因此IBM AIU芯片架构具有比多用途 CPU 更简单的布局。

    68120

    【DL笔记5】一文上手TensorFlow,并搭建神经网络实现手写数字识别

    首先我们要明确TensorFlow中的几个基本概念: Tensor 张量,是向量、矩阵的延伸,是tf中的运算的基本对象 operation 操作,简称op,即加减乘除等等对张量的操作 graph 图,由...tensor和tensor之间的操作(op)搭建而成 session 会话,用于启动图,将数据feed到图中,然后运算得到结果 其他的概念先放一边,我们先搞清楚上面这几个玩意儿的关系。...定义placeholder的方法: X = tf.placeholder(,,) operation op就是上面定义的tensor的运算。...因为经过softmax_cross_entropy_with_logits计算出来是,是所有样本的cost拼成的一个向量,有m个样本,它就是m维,因此我们需要去平均值来获得一个整体的cost。...的值给取出来,这样通过分析Z3,即可知道预测值是什么了。

    78260

    Z3简介及在逆向领域的应用

    前几天在萌新粉丝群看到机器人分享了z3求解约束器,正好在寒假的时候仔细研究过这个模块,今天就和大家分享下z3的简易使用方法和在ctf中该模块对于求解逆向题的帮助 简介 z3 z3是由微软公司开发的一个优秀的...make make install z3的简单使用 求解流程 上文提到我们可以将z3理解为一个解方程的计算器,对于求解方程,我们通常会经历四个步骤:设未知数,列方程,解方程,得到正解 使用z3模块,在我的眼中也是同我们解方程一样需要经历四个步骤...可以看到我们仅用几行代码就得出了答案,如果用普通的解法,我们要算4个方程所组成的方程组,所以使用z3有时候会大大增加我们的计算效率,简化我们的计算步骤。...总结 z3是一个强大的约束求解器,它不仅能处理一些看起来很复杂的逻辑问题,在逆向领域中往往可以简化我们计算步骤,增加求解效率,尤其是在ctf比赛中一些繁杂的RE题目通过z3来解往往显得非常简单,我们在解决问题时如果能灵活应用...z3,往往会有意想不到的效果。

    6K30

    2.Go编程快速入门学习

    应用场景: 使用iota能简化定义,在定义枚举时很有用。...1.分类说明 描述: 与其他编程语言类似 Go 语言内置的运算符有如下几种 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 2.算术运算符 运算符 描述 + 相加 - 相减 * 相乘...逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 5.位运算符 描述: 位运算符对整数在内存中的二进制位进行操作。...运算符 描述 & 参与运算的两数各对应的二进位相与。 (两位均为1才为1) \ 参与运算的两数各对应的二进位相或。...(两位有一个为1就为1) ^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1) 位就是乘以2的n次方。

    98330

    现存最古老计算机手册重见天日,比ENIAC要先进!

    Z1能用浮点数进行四则运算。从穿孔带读入指令。一段程序由一系列算术运算、内存读写、输入输出的指令构成。使用机械式内存存储数据。其指令集没有实现条件分支。...图为Z1的复制品 Z1的架构与祖思在1941年实现的继电器计算机Z3十分相似,它们之间仍然存在着明显的差异。 Z1和Z3都通过一系列的微指令实现各类操作,但前者用的不是旋转式开关。...Z1用的是数字增量器(digital incrementer)和一套状态位,它们可以转换成作用于指数和尾数单元以及内存块的微指令。...可编程:从穿孔带读入8比特长的指令,指令只有8种:四则运算、内存读写、从十进制面板读入数据、将结果寄存器里的内容显示到十进制展板。 内存和处理器中的内部数据以浮点型表示。...直到后来的EDVAC报告草案,以及冯·诺依曼和图灵开发的位串行机中,才引进了更优雅的体系结构。 冯·诺依曼也1926~1929年间居于柏林,那些年,康拉德·祖思和冯·诺依曼或许能在不经意间相遇相知。

    73510

    阿榜的生信笔记2

    大家仔细阅读文章哦,等会大家就知道答案了 三、对一个向量进行操作: ①、向量赋值输出: 小技巧:规范的赋值符号 Alt+减号相当于=,有两种“赋值+输出一起实现”方式 #####2.2对单个向量进行的操作...+函数名查看帮助文档,这相当于我们会查R语言字典了 四、对两个向量进行操作 ①、比较运算: #####2.3.对两个向量进行的操作##### x = c(1,3,5,1) y = c(3,2,5,6)...#(1)比较运算,生成等长的逻辑向量 x == y  y == x ②、两个向量的数学计算 #(2)数学计算 x + y ③、向量的链接 #(3)连接 paste(x,y,sep=",") 下面的图片是输出结果...聪明的你知道选B吧 小技巧:掌握了这个技巧,以后我们能更好的理解代码了 #利用循环补齐简化代码 paste0(rep("x",3),1:3) paste0("x",1:3) ⑥、交集、并集、差集 #(4...某些元素:取子集+赋值 x #改一个元素 x[4] <- 40 x #改多个元素 x[c(1,5)] <- c(80,20) x 提一个问题:为什么最后一个x的第四位是40而不是11?

    40300

    大学课程 | 计算机系统结构

    【答案:×】 第二章 数据表示,寻址方式与指令系统 2.1 数据表示 2.1.1 数据表示与数据结构 数据表示:能由机器硬件识别和引用的数据类型,表现在它有对这种类型的数据进行操作的指令和运算部件。...: 描述符方法实现阵列数据的索引要比用变址方法实现更方便 且便于检查出程序中的阵列越界错误 数据描述符方法为向量、数组数据结构的实现提供了一定的支持,有利于并简化编译中的代码生成,可以比变址法更快地形成元素地址...2.向量数组数据表示 为向量、数组数据结构的实现和快速运算提供更好的硬件支持的方法是增设向量、数组数据表示 向量在内存中是连续存放在一段空间里的,换句话说,这些向量元素的地址是连续的 在标量计算机上运行时...而在向量机中,由于有了向量数据表示,就可以把一个向量用一个位串来表示出来。向量指令就是能够用一条指令对向量的全部元素进行运算的指令。...引入向量、数组数据表示优点 不只是能加快形成元素地址; 便于实现把向量各元素成块预取到中央处理器; 能对阵列中的每个元素又是一个子阵列的相关交叉型阵列进行处理; 对稀疏矩阵能实现压缩存储、还原、运算等多种功能操作

    2.1K42

    【AI系统】代数简化

    下面我们将介绍三种不同的代数简化方案。算术简化顾名思义,算术化简就是通过利用代数之间算术运算法则,在计算图中可以确定优化的运算符执行顺序,从而用新的运算符替换原有复杂的运算符组合。...结合律非正式的讲,结合律是说: 不论我们怎样结合数字(即先计算那些数字),答案都是一样的。...交换律交换律是说:我们可以把数的位置对换而答案不变,即:形式化的讲,令 * 是非空集合 S 上的二元运算,如果 \forall x,y\in S ,都有则称运算 * 在 S 上是可交换的,或者说运算...其中还包括更多复杂的简化规则供读者参考。运行简化运算简化,是减少运算或执行时,冗余的算子或者算子对;我们给出两种规则来解释。...我们还是以一个简单的例子为准,考虑以下 2 个矩阵与 2 个向量的相加:假设矩阵的维度为 4,则一个向量与 4 维矩阵相加时,要先广播为 4 维,再与 Mat 相加,显然左式需要广播两次;但我们可以通过位置替换

    8500
    领券