数值类型乘除的优化位运算原理

常见位运算问题 计算机中的数在内存中都是以二进制的形式进行储存的,用二进制就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中尽量使用位运算进行操作,就会大大提高程序的性能。 阅读详情

首先说一下数值类型的乘积

例如:a = 256 * 100 原理就是将256加100次以后得出结果。

下面说一下位运算的原理:

100 = 64 + 32 + 4 = 26 + 25 + 22

a = 256 * 26 + 256 * 25 + 256 * 22 = (256<<6)+(256<<5)+(256<<2)

内容中出现的 “<<” 箭头向左表示乘2 ,向右表示除2 , 其默认值是1.

箭头后跟的数表示2 的幂次,例如 256<<6 就表示 256 * 26 . 除法类推。

下面开始测试位运算的优化:


    package test;
    public class number {
    public static void method_01(){
        double start  = System.currentTimeMillis();
        int a = 256 * 100;
        System.out.println("结果:"+a);
        double end = System.currentTimeMillis() ;
        System.out.println("程序运行时间(毫秒) : " + (end - start));
        System.out.println("--------------------------------");
    }


    public static void method_02(){
        double start  = System.currentTimeMillis();
        int b = (256<<6)+(256<<5)+(256<<2);
        System.out.println("结果:"+b);
        double end = System.currentTimeMillis() ;
        System.out.println("程序运行时间(毫秒) : " + (end - start));
    }

    public static void main(String[] args) {

        method_01();
        method_02();

      }
    }

在这里插入图片描述
由运行结果可以看出 ,哪种方法运算速度更快了吧。

(引用或转载请标明出处,谢谢)

位运算:计算机的“加减乘除“另一种玩法 <think>我们需要根据给定的内容生成一个不超过150字的文章摘要。内容是关于位运算的科普文章,解释了什么是位运算、六种位运算符、实战应用等。用户要求:"根据以下内容,生成≤150字的文章摘要"。也就是从给定的很长的文章中提炼出一个摘要,字数限制在150字以内。我们必须忠实于原文主要信息。注意是“文章摘要”,不是“创作”,是总结内容。要涵盖核心要点,比如位运算定义、运算符、用途、记忆口诀等,但摘要简洁,≤150字。需要计算。 首先概括:文章介绍位运算,即直接操作二进制每一位,包括与、或、异或、取反、左移、 阅读详情

相关推荐

用位运算加速程序——编译原理

位掩码和位移操作是常见的位运算技巧,可以用于提取特定位和实现乘除法的优化。位运算是对二进制位进行操作的一种运算方式,包括位与(&)、位或(|)、位异或(^)、位取反(~)等。在编译原理中,我们可以利用位运算来优化一些常见的操作,例如位掩码、位移操作等。通过定义一个掩码,并使用位与运算(&)可以提取出目标位的值,然后再进行相应的操作。在编译原理中,位掩码可以用于提取变量的特定位,例如提取寄存器中的标志位、提取操作码等。在编译原理中,位移操作可以用于优化乘法和除法的运算,特别是当乘数或除数是2的幂次方时。

UaCode的博客 164

JAVA对于乘法除法和模运算的优化,是否需要转换成位运算

最近思考一个问题。我们知道,在底层汇编代码中,除以2的指令效率远低于直接右移1位。所以我看到的不止一个java教学视频说过/2尽量写成>>1。但是另一方面,我记得上课学过编译器的优化问题,很多事情其实是不需要程序员考虑的。那么事实是怎么样的呢? 这就要考虑到java编译的流程了:.java文件先转换成.class文件(字节码),在运行的时候,JVM先

fylfyl2的专栏 4723

三运放仪表放大器电路设计全解析:从原理到PCB布局避坑指南

本文深度解析三运放仪表放大器电路设计,从差分放大器原理演进到经典三运放架构,详细阐述了其高共模抑制比(CMRR)和高输入阻抗的核心优势。文章重点剖析了电阻匹配、PCB布局对称性等关键设计要点对性能的影响,并提供了基于LTspice的仿真分析与从原理图到PCB布局、焊接调试的全流程实战避坑指南,助力实现高精度信号调理。

redis7keeper的博客 786

java数值类型的乘除位运算优化原理

啊

fight252的博客 591

ESP32S3电池电量监测实战:从分压电路到IDF组件配置(附GitHub源码)

本文详细介绍了ESP32S3电池电量监测的完整实战方案。从硬件分压电路的电阻选型、滤波设计,到软件层面利用ESP-IDF的ADC校准机制提升精度,并重点讲解了如何集成bat_monitor开源组件快速实现电压采集、电量计算、充电检测与事件通知。文章提供了从原理到调试的完整指南和GitHub源码,帮助开发者构建稳定可靠的物联网设备电源管理系统。

ee345的博客 530

workbench拓扑优化教程_拓扑优化实例-轮毂的优化

拓扑优化实例-轮毂的优化ANSYS Workbench的新版本集成了topology optimization模块,为用户的拓扑优化提供的很好的应用。通过拓扑优化topology optimization模块的使用可以对拓扑有较好的理解,该模块拓扑优化可以简单概括为一句话:如何在合适的位置去除确定的材料使用量,而相应的刚度变化影响最小。本例以汽车轮毂为例,来确定轮毂的辐条形状。1.建立模型DM中可...

weixin_39581739的博客 3043

用Java位运算实现加减乘除四则运算

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6412875.html 感谢博客:http://blog.youkuaiyun.com/itismelzp/article/details/49621741  提供的思路。 要用位运算来实现四则运算,不仅仅要知道&amp;,|,~,^,&lt;&lt;,&gt;&gt;怎么做,还需要先掌握位运算的几个运算规律: 1:~n=...

weixin_34358365的博客 703

【Codesys】-扫描添加失败,手动添加第三方模块,真·DC模式的高速计数模块

欧姆龙耦合器(NX-ECC201)和高速计数模块(NX-EC0132)单独使用。扫描设备添加到Codesys中,会报错,无法自动添加。记录一下,以防忘记。高速的计数保证了位置的准确性,位置准确就能保证裁切的精度,一切的基础就在这儿了,奈何目前只有欧姆龙和倍福能做到这样的波形。

qq_35316470的博客 1389

JAVA中的位运算

本文属转载,感谢原博主BuleSkyJava位运算原理及使用讲解 日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法。举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1。可能的做法是使用三木运算符,判断原始值为1还是0,如果是1,设置为0,否则设置为0.但是使用位运算,不用判断原始值,直接改变值就可以: 1^num//num为原始值 当然,一

wxz的博客 1146

yolov5部署之七步完成tensorRT模型推理加速

目录前言step 1. 下载yolov5源码以及tensorrtx源码,并将yolov5s.pt转为.wts模型step 2. 确定并下载自己准备使用的CUDA版本。step 3. 根据自己的CUDA版本下载对应版本的cuDNN以及TensorRTstep 4. 根据自己使用的VS版本下载对应版本的OpenCVstep 5. 安装CUDAstep 6. 安装cuDNN、TensorRT以及验证TensorRT是否安装成功 前言     前段时间研究了Pytorch的环境配置,之后便从github上下载了yo

Christo的博客 4万+

执行HDevelop项目

这一节,我们讲述的是如何用HDevEngine加载和执行一个HDevelop项目。代码部分来源于示例程序exec_program(源文件exec_program.cpp),检测塑料零件边界上的毛刺。1.Step 1:初始化首先,我们包含HALCON/C++和HDevEngine头文件以及命名空间。注意到在这个示例程序中,HDevEngine头文件已经包含在my_hdevoperatorimpl中,所

Z's Palace 2994

Java的位运算符及乘法优化——小白可懂!!!

位运算符用来对二进制位进行操作,Java中几个基本的位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 ** 运算方法: 按位与运算符"&": 其功能是参与运算的两数各对应的二进位相与,即只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 按位或运算符“|”: 其功能是参与运算的两数...

qq_41593847的博客 799

AXI-5.6 Multiple region interfaces

规则:如果从设备实现的区域少于16个,它必须确保对任何访问未支持区域的尝试都能给出符合协议的响应。具体实现方式由设计者定义。场景:一个错误的软件驱动试图向区域 5(该加密加速器未实现)写入数据。实现方式一:提供错误响应(严格模式)行为:加密加速器检测到AxREGION的值大于2,立即对该事务返回一个DECERR(解码错误)或SLVERR(从设备错误)响应。举例:这类似于你访问一个不存在的网站,服务器返回“404 Not Found”。它明确告知请求者:“你要找的东西不存在”。优点安全、清晰。

weixin_44700185的博客 672

数值类型乘除的优化位运算原理(位运算实现乘除)

我们知道计算机存储数据时只存0和1,即只有二进制,计算机不识别十进制数。所以对于计算机中的位运算相比加减乘除运算要快的多。位运算在运算中是最快的,计算同样乘、除结果,效率却是乘、除的三倍,也就是耗时是乘除的三分之一。 因此,可以使用位运算来代替部分算术运算,以此提高性能。其中最典型的就是对于整数的乘、除以及模运算的优化。 位运算符号: 【注意位运算符的优先级没有加减乘除高,在运算过程中有时需要加括...

努力努力再努力m 409

【数据结构】期末考试复习(考点+例题)

1.线性表定义及其存储实现:顺序表和链接表,优缺点分析(顺序存储可随 机访问,链式存储可灵活利用空间),相关操作的时间复杂度。 2.链表的插入删除操作 3.两种特殊的线性表及其应用:栈、队列 4.栈、队列上的(插入/删除)操作及其特点 5.循环队列满和空的条件 6.能够定义线性表、栈、队列的数据存储结构,能够实现相关操作的算法并 分析时间复杂度(例如插入、删除及其它应用等) 7.理解线性结构的应用( 如根据要求能灵活定义线性表结构,能根据线性表 的插入、删除操作解决实际问题) 二叉树基本概念与性质(高

Molly 的博客 9370

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【基础算法实战5.0】位运算

位运算是程序优化中不可忽视的一项技巧。它不仅能够让程序运行速度显著提高,而且对于某些问题,它的解法比传统算法更加直接和简洁。在这篇文章中,我将结合自己的理解和学习经验,介绍位运算的基本原理、常见操作、实际应用场景,并通过具体案例展示它如何在日常编程中为我们带来便利与效率提升。

2301_79633602的博客 2505

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Java 核心笔记】位运算符:从底层规则到实战应用(春招必懂)

本文系统介绍了Java位运算的核心概念与应用。主要内容包括:位运算分类(按位逻辑运算和移位运算)及其规则,如与、或、异或、取反等操作;常用位运算技巧(快速乘除、判断奇偶、变量交换等);实际应用场景(算法优化、源码解析等)。文章还总结了位运算的高频面试考点和Java使用注意事项,强调位运算直接操作二进制补码的特性,相比算术运算具有更高效率。

学习笔记与面试技巧 966

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C语言之原码、反码和补码与位运算

本篇文章便是在结合百度百科有关原码、反码、补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出。 目录: 机器数和真值 原码,反码和补码的基础概念 为什么要使用原码,反码和补码 原码,补码,反码再深入 位运算的运算说明 位运算的简单应用 一、机器数和真值 机器数(computernumber)是数字在计算机中的二进制表示形式 机器数有2个特点:...

qq_42680327的博客 962

【Java开发300个实用技巧】37.位运算优化性能提升10倍的黑科技

本文深入探讨了Java位运算在性能优化中的重要作用,揭示了其底层逻辑及实际应用。文章首先回顾了位运算的基础语法,包括与、或、非、异或及位移运算符,强调了其直接操作二进制位的高效性。随后,通过多个实战案例展示了位运算在状态判断、数值计算及数据加密等方面的显著性能提升,例如用位掩码代替布尔数组、快速乘除2的幂等。此外,文章还指出了新手在使用位运算时常见的误区,如运算符优先级和位移越界问题。最后,通过JMH性能测试对比,验证了位运算在实际应用中的高效性。文章鼓励开发者深入理解位运算,以提升代码性能和编程技能。

680

位运算 取某一位 java_Java 位运算妙用

问:说说你知道位运算可以做哪些事情,即位运算有哪些妙用?答:一提起位运算,大家都会想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是即节约又优雅。Java 中共有 7 个位运算符,分别是 ~(取反)、&(与)、|(或)、^(异或)、>>(右移)、<>>(无符号右移),具体常见妙用如下。1. 对称加密其实现原理是一个数异或同一个数两次还...

weixin_42138408的博客 999

Java位运算详解:原理、用法及实战场景(面试重点)

位运算与移位运算的核心优势是运算效率极高,本质是直接操作二进制位,跳过了十进制与二进制的转换环节,适合底层开发、高频运算等对效率要求极致的场景。但由于其语法晦涩、可读性较弱,实际业务开发中使用频率较低——毕竟代码的可维护性、可读性,往往比极致的效率更重要(除非有明确的性能瓶颈)。但对于Java学习者和面试者而言,位运算及其应用场景是必须掌握的知识点:一方面,它能帮助我们更深入理解计算机存储数据的底层逻辑(二进制、补码);

深耕 Java 生态 | 从基础到架构,步步进阶 | 以技术实力角逐理想岗位 629
上一篇: 数组存储压缩原理
下一篇: Object类equals方法与“ == ”
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值