不使用比較運算符如何比較兩個數的大小

分享一波:程序員賺外快-必看的巔峰干貨

前言

今天在水群的過程中看到有位群員談論到這個話題,是他找工作過程中某家公司的面試題(到底是哪家公司才會出這種沒營養的題目刁難別人),有點興趣,就開始寫了。
開搞

想了一下,其實就是題目怪了一點,難度其實并不高。這個題目讓我想起了前兩年看到的題目,只給你加法,怎么計算加減乘除(都說了到底是哪家公司才會出這種沒營養的題目)。相比起來,這題好歹是考了計算機中的加法器,而本文主題中談論的題目則真的是毫無營養。

思路其實很明顯,位運算,這類題目一般都是要用位運算的。這里需要使用到無符號右移。

首先,既然不允許直接比較,那我就相減嘛,a-b結果是0就是相等,結果是負數就是a小,結果是正數那就是a大。

當然這里是不能直接比較結果的正負的, 這樣依然不符合提議,怎么辦呢。

一切的運算在計算機中都是二進制,數字也是用二進制表示的,而二進制表示數字的時候,最高位是代表符號位,1是負數,0是正數,傳統的int最高32位。因此我們只需要判斷第32位的結果是0還是1就能判斷誰大誰小。直接判斷第32位肯定不現實,這里就需要使用到無符號右移運算符“>>>”。舉個簡單的例子,下面這串二進制只需要無符號右移31位,就可以得到最高位的值

1000 0010 1101 0100 1101 0001 0010 0011
無符號右移31位后
0000 0000 0000 0000 0000 0000 0000 0001

結果顯而易見,最高位降到了最低位,其余位全部變成了0,因此,只要結果是負數,那么進行 >>>31 之后的結果轉為十進制就是1,否則為0。

    int a = 10;int b = 12;int index = (a - b) >>> 31;

這樣,我們只需要判斷index即可。

那么問題來了,題目要求是不允許判斷,該怎么辦呢?其實這里可以使用數組,下標為0的地方輸出a>=b,為1的地方輸出a<b。

完整代碼:

public void test() {int a = 10;int b = 12;int index = (a - b) >>> 31;String[] arr = {"a>=b", "a<b"};System.out.println(arr[index]);
}

至此,已經基本可以判斷a和b的大小了。但是到這里可以發現,a=b和a>b的情況無法分離,這里我們可以繼續思考。

當a=b時,a-b=0,那么數組0下標位置是否可以直接放a=b?接著,我們把上面的index+1,結果就變成了:1下標位置是大于等于,2下標位置是小于。其中,等于的情況已經在0下標位置,因此1下標位置的結果就是a>b了。

String[] arr = {“a=b”, “a>b”, “a<b”};

分析到這里,思路已經很清晰,首先我們計算a-b,直接作為下標取arr中的數據,如果報錯了,說明不是0、1、2的情況,那么就繼續按照上面的思路進行位運算,取出1和2下標的值 。

public void test() {int a = 13;int b = 12;int diff = a - b;String[] arr = {"a=b", "a>b", "a<b"};try {System.out.println(arr[diff]);} catch (ArrayIndexOutOfBoundsException e) {int index = diff >>> 31;System.out.println(arr[index + 1]);}
}

到了這里,程序還存在一個bug,當a-b=2時,該程序的判斷結果是有問題的,因此,我們需要把計算結果為2的情況給排除,做法很簡單,把diff這個變量進行有符號左移2位的操作即可(如果只移1位,當diff為1時,計算結果是2,不符合題意)。左移2位之后的結果絕對值肯定比2要大,因此也就杜絕了出現下標為2的情況。

最終代碼。

public void test() {
int a = 14;
int b = 12;
int diff = (a - b) << 2;
String[] arr = {“a=b”, “a>b”, “a<b”};
try {
System.out.println(arr[diff]);
} catch (ArrayIndexOutOfBoundsException e) {
int index = diff >>> 31;
System.out.println(arr[index + 1]);
}
}

最后還是要吐槽一句,沒事別出這種沒營養的面試題刁難人家啦!

*************************************優雅的分割線 **********************************

分享一波:程序員賺外快-必看的巔峰干貨

如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程

請關注微信公眾號:HB荷包
在這里插入圖片描述
一個能讓你學習技術和賺錢方法的公眾號,持續更新

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/537000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537000.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java占位符填充_Java使用freemark生成word

1、制作模板先用office word做一個模板word文檔&#xff0c;${usrName}、${nowDate}占位符 可以使用 office 或者 wps 先創建一個模板表格 &#xff08;替換$部分可以在 模板格式改變之后 在替換xml 格式改了后有些原本的字符會分開&#xff09;2、用office word將模板word另存…

Java中如何使用非阻塞異步編程——CompletableFuture

分享一波:程序員賺外快-必看的巔峰干貨 對于Node開發者來說&#xff0c;非阻塞異步編程是他們引以為傲的地方。而在JDK8中&#xff0c;也引入了非阻塞異步編程的概念。所謂非阻塞異步編程&#xff0c;就是一種不需要等待返回結果的多線程的回調方法的封裝。使用非阻塞異步編程…

城市運行一網統管_【宣傳活動】持續開展城市運行“一網統管”建設宣傳活動...

為進一步推進本鎮城市運行“一網統管”建設工作&#xff0c;提高城市治理能力和治理水平&#xff0c;提升社會各界的知曉度和參與度&#xff0c;激發職能部門人員、黨員、群眾參與“一網統管”工作的熱情。9月10日&#xff0c;鎮網格中心于福泉居委會議室開展“推進城市運行‘一…

Java如何只使用位運算實現加減乘除

分享一波:程序員賺外快-必看的巔峰干貨 前言 接前面一篇博客&#xff0c;這又是某個公司的奇葩面試題&#xff08;都說了到底是哪家公司才會出這種沒營養的面試題&#xff09;。不過吐槽歸吐槽&#xff0c;這個題目還是有點學問的&#xff0c;比前面那個 不使用比較運算符如何…

Netweaver里某個software component和C4C的版本

有同事問如何通過代碼的方式獲得Netweaver里某個Software component的版本信息&#xff0c;以及Cloud for Customer&#xff08;C4C&#xff09;的版本信息。 Netweaver 點了Detail按鈕后&#xff1a; 這些版本信息存在表CVERS里&#xff1a; C4C C4C的版本號在Help->About …

pmc訂單表格_復工了,讀一則“如何提升訂單準交率和生產效率”的真實故事

故事發生在中國南方小鎮上一個做辦公家具的公司……家具公司創建于1995年&#xff0c;是一家集研發、生產、銷售、服務為一體的現代辦公家具、酒店家具制造企業。主要產品有實木班臺系列、會議臺系列、職員桌系列、屏風系列、沙發系列、辦公座椅、酒店家具系列。在省外還有兩個…

GET和POST請求到底有什么區別?

分享一波:程序員賺外快-必看的巔峰干貨 看到這個標題&#xff0c;想必大部分人都已經想關掉這篇博客了。先別急&#xff0c;你真的知道這兩個的區別嗎&#xff1f; 做過WEB開發的朋友可能很熟悉&#xff0c;看到這個問題能立馬脫口而出二者的區別。 GET在瀏覽器回退時是無害的…

有贊電商云應用框架設計

背景 有贊是 SaaS 公司&#xff0c;向商家提供了全方位的軟件服務&#xff0c;支撐商家進行采購、店鋪、商品、營銷、訂單、物流等等管理服務。 在這個軟件服務里&#xff0c;能夠滿足大部分的商家&#xff0c;為商家保駕護航。 但是很多大商家往往會有自己的特殊需求&#xff…

vivado 如何創建工程模式_基于Vivado的FPGA高性能開發研修班2019年8月30日上海舉行...

一、課程介紹&#xff1a;從7系列FPGA開始&#xff0c;Xilinx提出了Vivado Design Suite設計軟件&#xff0c;提供全新構建的SoC 增強型、以 IP 和系統為中心的下一代開發環境&#xff0c;以解決系統級集成和實現的生產力瓶頸。同時&#xff0c;Xilinx專門針對Vivado推出了Ultr…

程序員的自我修養——遠離“外包思維”

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 在我們做開發的日子里&#xff0c;不免會進行跳槽&#xff0c;跳來跳去公司無非就分成兩大類——互聯網公司、外包公司。當然我們本次討論的并…

英特爾為 Kubernetes 推出分布式深度學習平臺:Nauta

2019獨角獸企業重金招聘Python工程師標準>>> 隨著人工智能的發展&#xff0c;深度學習的價值不斷增長&#xff0c;但實現它可能是一個復雜耗時的過程。英特爾(Intel)正尋求通過其在 Kubernetes 進行分布式深度學習的新開源平臺來改變這一狀況&#xff0c;該深度學習…

pytorch梯度下降函數_Pytorch中常用的四種優化器SGD、Momentum、RMSProp、Adam

來源&#xff1a;AINLPer微信公眾號編輯: ShuYini校稿: ShuYini時間: 2019-8-16 引言很多人在使用pytorch的時候都會遇到優化器選擇的問題&#xff0c;今天就給大家介紹對比一下pytorch中常用的四種優化器。SGD、Momentum、RMSProp、Adam。隨機梯度下降法&#xff08;SGD&#…

2019/02/11-分布式數據庫概述

分布式數據庫類型&#xff08;1&#xff09;同構同質型&#xff1a;各場地都是同一種類型的數據庫&#xff0c;如都是關系型數據庫&#xff0c;且都是同一型號的數據庫管理系統&#xff08;2&#xff09;同構異質型&#xff1a;各場地是同一種類型的數據庫&#xff0c;但是數據…

python計算無窮級數求和常用公式_傅里葉變換(二) 從傅里葉級數到傅里葉變換...

在上一部分當中&#xff0c;得到了利用三角函數表示周期函數的方法&#xff0c;但是對于非周期函數就...涼了。所以有什么辦法嗎&#xff1f;沒辦法&#xff08;劃掉&#xff09;。這時候我們就需要拿出來我們的黑科技——傅里葉變換。一、傅里葉級數的推廣當然這東西肯定不是憑…

中鳴投籃機器人怎么組裝_1000余人參加洛陽市青少年機器人競賽

機器人智能識別地面上的黑色線條&#xff0c;并沿著線條來到指定位置&#xff0c;放下“快遞包裹”&#xff1b;無人機在空中飛舞&#xff0c;時而鉆過圓環&#xff0c;時而來個空翻&#xff0c;猶如跳芭蕾般在空中劃過一道優美曲線&#xff1b;橘紅色乒乓球從筒道中送出&#…

Exchange隊列優先級介紹和配置

一、場景 在日常辦公環境中所有郵件都會存在重要與非重要的情況&#xff0c;并且不同的郵箱的使用人的級別也不一樣&#xff0c;不一樣的職位級別要求不一樣的運維等級&#xff0c;以及發送郵件要求的速度也不一樣。這就導致了郵件需要按照重要性進行分類&#xff0c;重要的郵件…

Mybatis源碼閱讀(一):Mybatis初始化1.3 —— 解析sql片段和sql節點

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

IBM研究院計畫5年改變人類生活創新預測

IBM研究院近日發布未來5年將會改變人類生活方式的5項創新預測&#xff08;IBM 5 in 5&#xff09;&#xff0c;包含透過數字分身&#xff08;Digital Twin&#xff09;農業將用更少的資源供給不斷增長的人口、區塊鏈能防范更多的食物浪費、用微生物基因組群保護人類受到有害細菌…

添加請求頭 retrofit_RxJava 與 Retrofit 結合的最佳實踐

前言RxJava和Retrofit也火了一段時間了&#xff0c;不過最近一直在學習ReactNative和Node相關的姿勢&#xff0c;一直沒有時間研究這些新東西&#xff0c;最近有個項目準備寫&#xff0c;打算先用Android寫一個Demo出來&#xff0c;卻發現Android的世界發生了天翻地覆的變化&am…

Mybatis源碼閱讀(二):動態節點解析2.1 —— SqlSource和SqlNode

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…