<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們經常使用的加減乘除,我們所看到的只是表面的效果,那麼加減乘除在底層究竟是怎麼實現的?今天就讓我們一探究竟.今天用位運算實現的加減乘除不使用任何的加減乘除符號.
&運算二進位制每一位全1為1,否則為0
public static void main(String[] args) { int a = 1; int b = 3; System.out.println(a & b); }
|運算二進位制每一位有1為1,全0為0
public static void main(String[] args) { int a = 1; int b = 3; System.out.println(a | b); }
^運算二進位制每一位不同為1,相同為0
public static void main(String[] args) { int a = 1; int b = 3; System.out.println(a ^ b); }
~運算是二進位制每一位按位元取反.
public static void main(String[] args) { int a = 1; System.out.println(~a); }
public static void main(String[] args) { int a = 1; int b = 3; System.out.println(a + b); }
下來我們用位運算實現一下加法.
我們進行一次互斥或運算就相當於進行一次無進位加法,那這樣也不能實現加法,那我們得想辦法,實現進位的數值.
進行一次與運算,只有同時為1才為1,也當同時為1時,我們需要進位,所以我們進行與運算後進行左移一位的操作,即可得到進位後的數值.
我們對互斥或運算和與運算後左移一位的結果進行相加即可,但我們只能進行位運算,所以我們只能再次進行互斥或運算與與運算,直到雲運算的結果為0時,我們的互斥或運算的結果即為加法的結果.
public static int bitAdd(int a,int b) { int sum = 0; while(b != 0) { sum = a ^ b; b = (a & b) << 1; a = sum; } return sum; } public static void main(String[] args) { System.out.println(bitAdd(1,2)); }
public static void main(String[] args) { int a = 1; int b = 3; System.out.println(a - b); }
下來我們用位運算實現一下減法.
在我們有了位運算實現加法的基礎之後,我們的減法就變得簡單了,a - b == a + ( -b ),所以我們只需要將b變為-b即可實現減法功能,但我們不能使用負號,那我們來用位運算來實現一下.
public static void main(String[] args) { System.out.println(~3); }
我們可以發現一個數取反與相反數差一,我們取反加一即可得到相反數.
public static void main(String[] args) { System.out.println(~3 + 1); }
public static int bitAdd(int a,int b) { int sum = 0; while(b != 0) { sum = a ^ b; b = (a & b) << 1; a = sum; } return sum; } public static int bitSub(int a,int b) { return bitAdd(a,~b+1); } public static void main(String[] args) { System.out.println(bitSub(1,3)); }
public static void main(String[] args) { int a = 1; int b = 3; System.out.println(a * b); }
我們小學的時候是怎麼進行乘法的,按位元相乘,每一位和每一位相乘.
二進位制中也是一樣的,按位元相乘,如果被乘數二進位制位是1則與乘數相乘.每次運算進行移位
public static int bitAdd(int a,int b) { int sum = 0; while(b != 0) { sum = a ^ b; b = (a & b) << 1; a = sum; } return sum; } public static int bitMul(int a,int b) { int sum = 0; while(b != 0) { if((b & 1) != 0) { sum += a; } a <<= 1; b >>>= 1; } return sum; } public static void main(String[] args) { System.out.println(bitMul(1,3)); }
public static void main(String[] args) { int a = 7; int b = 2; System.out.println(a / b); }
我們在用位運算實現除法時,採用逆推的方式,a / b = c,
a = c * b。
我們只需要求出a減去b向左的移位,只要滿足a <= b的移位即可,每次移動多少位即a / b的結果二進位制中某一位為1,以此迴圈倒推即可.
public static int bitAdd(int a,int b) { int sum = 0; while(b != 0) { sum = a ^ b; b = (a & b) << 1; a = sum; } return sum; } public static int negNum(int n) { //轉化為相反數 return bitAdd(~n,1); } public static int minus(int a,int b) { //實現兩個數相減 return bitAdd(a,negNum(b)); } public static boolean isNeg(int n) { //判斷是否為負數 return n < 0; } public static int bitDiv(int a,int b) { int x = isNeg(a) ? negNum(a) : a; int y = isNeg(b) ? negNum(b) : b; int res = 0; for (int i = 30; i >= 0 ; i = minus(i,1)) { if((x >> i) >= y) { res |= (1 << i); x = minus(x,y << i); } } return isNeg(a) != isNeg(b) ? negNum(res) : res; } public static void main(String[] args) { int a = 7; int b = 2; System.out.println(bitDiv(a,b)); }
到此這篇關於Java利用位運算實現加減乘除的方法詳解的文章就介紹到這了,更多相關Java位運算 加減乘除內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45