• 前言

    最近公司为了拓展员工安卓开发技能,要求java和kotlin进行混合开发。为了快速将java代码转入kotlin,利用as自动转kotlin的方式,把java代码直接拷贝到kt文件中,大部分代码都能自动转成对应的kt代码,但是java中& ,|,>> ,<<等相关的位移代码不能正确转义过来。我就自己看了一下kotlin的位移相关的文档,把相应的java手动转成kotlin。

什么是位运算?
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如:4 & 3 => 100 | 11 = 111 =7

补码?
首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。
正数的补码是其本身;
负数的补码是:符号位不变,其余各位求反,末位加1。

按位取反?
原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。如:101 的原码 0101 最高位0表示符号,其余位表示大小。
取反: 正数 -> 补码 取反(符号位取反) 减1 取反(符号位不变)
负数-> 原码 取反(符号位取反) 加1 取反(符号位不变)

  • kotlin常用的7种中缀表达式

  •  var a = 5,b = 11
     and  对应位都为1,则为1,如:a and b= 001 => 1   
     or     对应位有一个是1,则为1 如:a or b= 111 => 7
     xor   对应位值相同,则结果为0,否则为1 如:a xor b= 110 => 6
     inv   对应位取相反的值,如: a.inv() => 1010 =>1001 => 1110 => -110 =>-6
     shl   按位左移指定的位数,相当于乘以2的N次方。移掉的省略,右边缺失的位,用0补齐
     shr   按位右移指定的位数,相当于除以2的N次方,移掉的省略,左边缺失的位,如果是正数则补0,若为负数,可能补0或补1,这取决于所用的计算机系统
     ushr 按位右移指定的位数,移掉的省略,左边缺失的位,用0补齐 
    
  • 位运算应用

         var a = 5,b = 4
        1. 奇偶判断
        a and 1 == 0  //偶数
        a and 1 == 1  //奇数
        2. 交换两个整数的值
        a = a xor b
        b = a xor b
        a = a xor b
    
  • 总结
    位运算主要在直接操控二进制数时进行使用,可以达到节约内存,使你的程序运行速度更快Java定义了位运算符,可应用在整形(int)、长整型(long)、短整型(short)以及字符型(byte)等类型上。位运算符作用在所有的位上,并按位进行运算。Kotlin与之略有不同,它并没有提供特殊的操作符,只提供了中缀形式的表示方法,并且Kotlin只可用在Int和Long类型上

前言最近公司为了拓展员工安卓开发技能,要求java和kotlin进行混合开发。为了快速将java代码转入kotlin,利用as自动转kotlin的方式,把java代码直接拷贝到kt文件中,大部分代码都能自动转成对应的kt代码,但是java中&amp; ,|,&gt;&gt; ,&lt;&lt;等相关的位移代码不能正确转义过来。我就自己看了一下kotlin的位移相关的文档,把相应的java手动... 由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。 首先,十进制才是我们比较熟悉的,在java当中,声明int类型变量时 比如当我们声明 int a = 12; 这个时候a表示十进制的12, 如果我们要声明八进制,只要在前面加个0 int a = 012; 这个时候a表示十进制的10, 而如果我们要声明十六进制,只要在前面加个0x int a = 0x12; 这个时候a表示十进制的18 二 JAVA 与十进制的加减乘除不同,jav 如果添加 算法 ,则必须同时添加一个测试(JUnit)。 在没有测试的情况下,PR将不被批准。 遵循正确的编码准则并正确描述方法。 请参阅。 合并您的拉取请求后,将根据分发您的工作。 请不要在代码内添加签名。 提交历史足以确定谁将代码添加到了仓库中。 确保要添加的 算法 属于“ 算法 ”的特定域。 请不要创建名称如Misc,Others等的包。 进行PR时,请确保仅提交 Kotlin 文件,而不提交任何项目特定的文件。 如果您觉得自己的IDE正在生成一些额外的文件,则不要将它们添加到git中,或将扩展名添加到.gitignore 。 请不要针对在线法官(例如Hackerrank,Leetcode等)提出的问题解决方案提出公关。 提高公关的步骤 通过将项目导入为Gradle项目,通过IntelliJ在本地计算机上打开分支的仓库。 在本地计算机上进行更改 将更改推送
shl(bits) – 左移位 (Java’s &lt;&lt;) shr(bits) – 右移位 (Java’s &gt;&gt;) ushr(bits) – 无符号右移位 (Java’s &gt;&gt;&gt;) and(bits) – 与 &amp; or(bits) – 或 || xor (bits) – 异或 inv () – 反向 注意事项: kotlin 中, 位运算 只能是Int...
Kotlin 中的竞争性编程 算法 这个存储库包含我用 Kotlin 编程语言实现的用于竞争性编程的有用 算法 。虽然目标是使 算法 尽可能正确,但可能存在一些错误。因此,这些 算法 都不是要在生产中部署的。但是,由于准确性很重要,我将尝试为每个实现的 算法 编写单元测试。 此外,这个 repo 中的大部分代码都是用于编程竞赛(例如 codeforces、atcoder、google code jam 等),所以重点是保持尽可能简洁,所以没有遵循一些最佳实践和某些功能可能需要修改才能在一般情况下使用。 字符串散列(在这里阅读更多) Rabin Karp 算法 (在此处和此处阅读更多信息) 键索引计数又名计数排序(在 算法 的第 5.1 节和此处阅读更多内容) LSD 和 MSD 排序(在 算法 的第 5.1 节中阅读更多内容) 特里(阅读更多 算法 的第 5.2 节) 子集和排列(在Competitive Programmers Handbook的第 2.2 节中阅读更多内容) 下一个排列(在这里阅读更多)
使用笔记:DataBinding在 Kotlin 中的使用 DataBinding是一个实现数据和UI绑定的框架,同时也是实现MVVM模式所依赖的工具。 今天文章主要记录一下DataBinding在 Kotlin 中的简单使用 Demo下载 在应用的build.gradle文件中添加以下代码: android { dataBinding { enabled = true 基本使用功能 替代findViewById 布局文件根节点必
本篇文章为大家详细的介绍Koltin特有的操作符重载。或许对于有编程经验的朋友来说,操作符这个词绝对不陌生,就算没有任何编辑基础的朋友,数学中的算数运算符也绝不陌生。例如(+、-、*、/、>、<、>=、<=)等。而算数运算符是编程语言中的一种操作符而已。就算你没有任何基础,也请你详细的看完这篇文章,我相信你会很有收获的。 所谓预定:即指 Kotlin 允许我们为自己的类型提供预定义的一组操作符的实现。这些操作符具有固定的符号表示(如 + 或 *)和固定的优先级。为实现.
开始学习 Kotlin 是因为Google将 Kotlin 作为Android开发的官网语言,现在市面也有一些公司面试的时候开始将 Kotlin 作为一个加分项,其实可以想想多学一点东西,多一点傍身的技巧,O(∩_∩)O哈哈~。 Kotlin 的基本数据类型 Kotlin 中使用的基本类型:数字、字符、布尔值、数组与字符串。 Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类...