首页
学习
活动
专区
圈层
工具
发布

Java 基本类型的各种运算,你真的了解了么?

反码 反码是正数不变,负数取反的码。正数的反码和原码一样,负数的反码需要保留最左边符号位,然后将原码数值位按照每位取反得到。 比如数字6在 8 位计算机中反码就是它的原码:0000 0110。...为了解决这个问题,补码就出现了。 补码 补码是正数不变,负数取反补一的码。正数的补码和原码一样,负数的补码需要保留最左边符号位,然后将原码数值位按照每位取反再加一。...三码第一位是符号位,1 表示负数,0 表示正数,其余位是数值位。 正数的三码都一样。 负数的反码是在原码基础上对非符号位取反,即负数反码=符号位+原码数值位取反。...负数的补码是在反码基础上加一,即负数补码=反码+1。 负数补码转原码是在补码基础上减一,然后对非符号位取反,即负数原码=(补码-1)&&数值位取反。...当给定一个 String 操作数和一个整数操作数时,这个运算符就会把整数操作数转换为表示其十进制形式的 String,将两个字符串串联起来,生成一个新创建的 String。 以下代码会输出什么呢?

1.1K20

基本数据类型:Kotlin、Dart (Flutter)、Java 和 C++ 的比较

Java 不支持无符号的整数类型,所有的整数类型都是有符号的。Kotlin 在 1.5 版本开始支持无符号的整数类型,例如 UInt 和 UByte。...对于负数,首先取其绝对值的原码,然后对所有位取反(得到反码),最后在反码的基础上加 1(得到补码)。...类型转换:在进行类型转换时,如果源类型的范围大于目标类型的范围,可能会丢失精度。...同样,如果将一个有符号整数转换为无符号整数,或者将一个无符号整数转换为有符号整数,也可能会丢失一些信息。 浮点数和整数之间的转换:当将一个浮点数转换为整数时,小数部分将被丢弃,这可能会导致精度丢失。...同样,如果将一个大的整数转换为浮点数,也可能会丢失一些精度,因为浮点数不能精确表示所有的整数。 总的来说,需要了解正在使用的数据类型的限制,并确保代码能够正确处理可能的溢出和类型转换问题。

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

    世界上有10种人,一种是懂二进制的人,一种是不懂二进制的人。

    前言 ❝这天,我正在一个技术交流群跟群友交流学(mo)习(yu)经验,忽然看到了这样的一个问题。 ?...❞ 反码 ❝ 反码的计算方式如下 「正数的反码是其本身」 「负数的反码:符号位不变、真值位取反」 例如:1000 0010转换为反码后为 1111 1101 为什么要引入反码这个概念呢?...原因是这样的:如果计算机基于原码对两个正数做减法运算,那么就需要对符号位进行复杂的处理,来判断最终的结果是正数还是负数,这样显然会让计算机的实现变得异常复杂。...❝通常情况下只有两个相同符号的数计算时才有可能出现溢出的情况,两个正数相加产生的溢出叫做正溢出,两个负数相加产生的溢出叫做负溢出。...位运算 ❝程序中的所有数在计算机内存中都是以二进制补码的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。

    1.6K20

    软考:数值转换知识点详解

    例如,在C++中,可以使用 std::stoi 函数将字符串转换为整数,并指定基数(进制)。...示例:double d = 3.14159;float f = static_cast(d); // 精度降低2.3 整数与浮点数之间的转换整数与浮点数之间的转换可能会导致精度损失或数据类型不匹配的问题...数值表示4.1 原码、反码、补码的表示方法在计算机中,整数通常使用原码、反码或补码来表示。这些表示方法定义了如何存储正数、负数和零。原码:直接使用二进制数表示数值,最高位为符号位。...反码:正数的反码与原码相同,负数的反码是其绝对值的原码除符号位外按位取反。补码:正数的补码与原码相同,负数的补码是其反码加1。...精度损失:当浮点数转换为整数时,小数部分被截断。类型不匹配:当尝试将不兼容的数据类型进行转换时发生。9.3 性能优化和安全考虑在进行数值转换时,性能优化和安全考虑非常重要。

    1.6K00

    Kotlin 数据类型详解:数字、字符、布尔值与类型转换指南

    Kotlin 数据类型在 Kotlin 中,变量的类型由其值决定:示例val myNum = 5 // Intval myDoubleNum = 5.99 // Doubleval...数据类型分为不同的组:数字字符布尔值字符串数组数字数字类型分为两组:整数类型存储整数,正数或负数(如 123 或 -456),不带小数。有效类型为 Byte、Short、Int 和 Long。...如果不为数字变量指定类型,则大多数情况下会返回 Int 用于整数和 Double 用于浮点数。整数类型ByteByte 数据类型可以存储从 -128 到 127 的整数。...值 66 在 Java 中会输出 "B",但在 Kotlin 中会产生错误:示例val myLetter: Char = 66println(myLetter) // 错误字符串String 数据类型用于存储字符序列...在 Kotlin 中,数字类型转换与 Java 不同。

    45210

    你可能没有实现一个正确的atoi函数

    前言 我们都知道,atoi函数用于将一个字符串转换成整数。atoi函数看起来似乎很容易实现,你甚至可以很快写出一个版本,但是是否符合要求呢?...例如字符串“1234”转整数是这样的计算流程: 遇到字符1,得到结果1; 遇到字符2,得到结果1 * 10 + 2,即12; 遇到字符3,得到结果12 * 10 + 3,即123; 遇到字符4,得到结果...我们需要考虑以下几种情况 如果开头是负号,则标记为负数;正号或数值,则标记为正数 跳过开头的空格,从第一个有效字符开始 使用更大类型存储计算值,如果负数比INT_MIN还小或正数比INT_MAX还大,则表明溢出...,返回INT_MIN或INT_MAX,或者在下次计算之前与INT_MIN/10或INT_MAX/10比较 使用全局变量记录出错情况,区别正常转换为0或最大最小值 遇到非数值时即退出 根据上面这些考虑,我们重新实现代码...但这些都不是重点,重点是我们在考虑实现atoi函数的时候,需要考虑多种异常场景,这在平常实现其他功能接口的时候也是一样的。 思考 前面的代码有什么不足?你忽略了哪些场景?

    2.8K20

    数值信息的机器级存储

    但是我们代码中定义的各种数值又是如何转换为二进制串存储在这些「字节」里面的呢?为什么两个整数相加之后的结果会变成负数? 等等这些类似问题,其实都归咎于 计算机中是如何存储各种类型的数值的。...这就是计算机中整数的「原码」表示。 但是,在进行基本的加减运算的时候,发现问题了。...所以反码的一个问题就是对于零这个整数数值来说,产生了两种编码结果。于是,人们又发明了「补码」用于解决这个问题,而事实证明,「补码」最终成为计算机中编码数值的最后方案。...② 扩展与截断数字 这是一类在类型转换时会遇到的问题,我们在编程中常常会将「小范围」类型的变量转换为「大范围」类型的变量,或者将「大范围」类型的变量强制转换成「小范围」类型的变量。...正数加正数 负数加负数 正数加负数 首先,对于正数加负数的情况,没什么好说的,不可能产生溢出问题。 对于正数加正数的情况而言,可能会产生「负溢出」。

    1.6K60

    【愚公系列】软考高级-架构设计师 003-进制的转换

    2.带符号的二进制整数带符号的二进制整数是使用二进制表示的整数,其中一位(通常是最高位)被用来表示数的符号——正数或负数。...例如,对于一个8位的二进制数:正数5表示为:00000101负数5表示为:10000101原码简单直观,但在运算中存在一些问题,如正负零的区别表示和算术运算复杂性。...补码补码是计算机中最常用的表示带符号整数的方法。对于正数,补码与其原码相同;对于负数,补码是其原码除符号位外所有位取反(即0变1,1变0,称为反码)后加1。...例如,8位二进制数中:正数5的补码表示为:00000101(与原码相同)负数5的补码表示为:11111011补码的优势在于简化了包括加法和减法在内的算术运算,使得计算机能够使用统一的电路进行数值运算,并且解决了原码表示中正负零的问题...我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    1.4K11

    「硬核JS」数字之美

    写在前面 一直都在佛系更新,这次佛系时间有点长,很久没发文了,有很多小伙伴滴我,其实由于换工作以及搬家的原因,节奏以及时间上都在调整,甚至还有那么一小段时间有点焦虑,你懂的,现已逐渐稳定,接下来频率应该就会高了...=面试题」 ,应该有很多人会忽略一些基础的东西吧,殊不知决定楼有多高的是地基 前几天有朋友问我位运算相关的东西,其实本来是打算写篇位运算的文章,但描述位运算的前提是需要大家能够清晰的了解计算机中的 数字...我们可能注意到了,这样好像没办法表达负数 So,为了表示正与负,先辈们就发明了 「原码」,把左边第一位腾出来,存放符号,正数用 0 来表示,负用 1 来表示 上图就是正负数的 原码,你可能在疑惑为什么上面表里我只画到了数字...,最小正数和最大负数 而最终的数字范围即 最小负数~最大负数 并上 最小正数~最大正数 从S、E、M即数符、阶码、尾数三个维度看,S 代表正负,阶码 E 的值远大于尾数 M 的个数,所以阶码 E 决定大小...,则是安全整数 一个整数是否是安全整数可以使用 JS 的内置方法 Number.isSafeInteger() 来验证 最后 开发过程中不乏有找过安全范围的计算,这个时候我们就得要转为字符串计算了,当然不想自己转也可以使用开源库来计算

    6.7K20

    万字长文,史上最全Python字符串格式化讲解

    ,负数加负号; 2) -: 左对齐,正数无符号,负数加负号; 3) 空格: 右对齐(默认的对齐方式),正数前加空格,负数前加负号; 4) 0: 右对齐,以0填充,正数无符号,负数加负号...十进制转二进制 a. 十进制整数转二进制: 除2取余,逆序排列; b. 十进制浮点数转二进制: 乘基取整; 不精确尾数 十进制浮点数的小数部分在转换为二进制的时候有可能出现无限小数无法乘尽的情况。...但计算机无法处理无限小数,会将十进制浮点数对应的二进制数最多保留53位,53位后面的数据直接截断,从而导致在将二进制浮点数转换回十进制的时候出现不精确的现象。...王暖暖| # 字符串右对齐 (2.2) 正整数 print("|%+10d|" % 26) >>> | +26| # 正整数右对齐,正数加正号 print...: 有无符号,可选: 1) +: 正数加正号,负数加负号; 2) -: 正数不变,负数加负号(默认); 3) 空格: 正数加空格,负数加负号; (5) #:

    5.5K20

    编程常用算法 --- CC++ 语言实现(不定期更新)

    1、判断回文数/回文字符串 回文串即为正着读和倒着读都一样的字符串。这算是一个比较简单的问题了,数字和字符串是一样的,把数字也当成字符串输入就好了,当然也可以采用数字转字符串算法,之后会介绍。...2、十进制数字转换为字符串 对于这个问题,其实标准库里面就有实现,C++ 中 cstdlib (C语言里面对应的是 stdlib.h )头文件中的 itoa函数就是其中一个例子,当然 cstdio (C...处理这个问题步骤多了点,但是逻辑并不复杂:如果是正常的数字,那么就分为正数和负数,注意一下负数的处理,再注意一下小数部分和整数部分分开处理就好了: /** * translate demical number...4、m 进制数转换为 n 进制数(正数) 关于进制转换,这其实是一个很常见的问题了。...那么对于 m 转 n 也是差不多,可以先把 m 进制的数转换为 10 进制,然后再把这个 10 进制数转换为 n 进制。

    1.7K10

    二进制中1的个数

    前言 有一个整数,想知道它的二进制表示中有多个1,你会怎么做?本文将带大家深入学习下二进制以及它的各种运算,一步步的研究出这个问题的解决方案,欢迎各位感兴趣的开发者阅读本文。...负整数转二进制 在计算机中,负数是以原码的补码形式进行表达的,通过前面的学习,我们知道了想求负数的补码,就得先求出它的原码。...我们用计算器来验证下我们计算出来的-80的二进制码是否正确,如下所示: image-20211014233921705 小数转二进制 在二进制中,小数被称为浮点数,我们在将十进制小数转换为二进制小数时...思路与编码 看到这里,我想各位开发者已经看出了此问题的解题思路了。 没错,思路就是:把一个整数减去1,再和原整数做位与运算,会把该整数最右侧的1变成0。...decimalVal = decimalVal & (decimalVal - 1); } // 返回结果 return count; } } 最后,我们写个测试用例,验证下上述代码能否正常工作

    1.3K20

    程序中的整数

    1. 2的补码 在计算机中,整数是用2的补码表示的,其定义如下(非官方定义,自己总结的): 最高位(首位)是符号位,为0代表正数,为1代表负数 对于非负整数(大于等于0的整数),其补码等于原码(也就是说...,直接将该整数转换为2进制,即为补码) 对于负数,其补码等于对应正数的补码按位取反后加1 注:正数的原码、反码、补码是相同的,这里不再展开。...3. 2的补码转换为十进制 2的补码转换为十进制的方法如下: 若符号位为0,则该数为正数,直接转换为十进制即可 若符号位为1,则该数为负数,需先将该数减1,然后取反,得到的数转换为十进制,即为原负数的绝对值...二、整数在程序中的表示 本章以下面的代码为例,看看整数在汇编代码和运行期的形态。...输出结果不同,是由于printf根据格式化字符串(如%u、%d等)对内存中的数据进行解析,并将解析结果输出。也就是说,内存中同样的内容,按照不同的规则解读(格式化字符串不同),会输出不同的内容。 ?

    2K20

    Java Double转Bigdecimal丢失精度原因学习

    大家好,又见面了,我是你们的朋友全栈君。...记录学习Double转Bigdecimal丢失精度的原因 注意事项: 不能直接使用Bigdecimal的构造函数传double进行转换,部分数值会丢失精度,因为计算机是二进制的Double无法精确的储存一些小数位...这次就来进一步学习一下 首先给出Double转BIgdecimal的常用方式 1、可以手动先将Double转换为String再转换为Bigdecimal 则不会发生精度丢失问题 BigDecimal...8位二进制正常的范围值为0~255。但是十进制的小数的对应的指数位可能为负数,为了方便记录所以规定指数位的指数偏移 Float+127,Double+1023 后再转换为二进制。...我们还是以0.1为例 先将0.1转换为二进制,方法我们不详细介绍,0.1的计算大致可以乘以2取整直到结果为0 0.1 * 2 = 0.2 小数位继续计算 二进制取整数位: 0 0.2 * 2 = 0.4

    4.7K30

    当无符号与有符号整数相遇:C++中的隐式类型转换陷阱

    在C++编程中,整数类型之间的运算是非常常见的操作。然而,当无符号整数和有符号整数混合运算时,可能会产生令人意想不到的结果。让我们通过一个简单的例子来探讨这个问题。...直观上,我们可能会认为结果是10+(-42)=-32,但实际运行结果却是一个很大的正数。为什么会这样?...1.整数提升与类型转换在C++中,当表达式中同时包含有符号和无符号整数时,编译器会执行整型提升(integerpromotion),将有符号整数转换为无符号整数,然后再进行计算。...,结果是实现定义的2.具体转换过程在我们的例子中:u是无符号整数,值为10i是有符号整数,值为-42当执行u+i时:编译器检测到混合类型运算将有符号整数i转换为无符号整数-42转换为无符号整数:由于无符号整数不能表示负数...理解其背后的机制对于编写正确的代码至关重要:有符号到无符号的转换使用模算术规则负数转换为无符号会变成很大的正数循环和比较操作特别容易受到影响作为最佳实践,应该:避免不必要的无符号整数使用在混合运算时显式转换类型启用编译器警告来检测潜在问题在代码审查时特别注意这类问题通过理解这些规则和采取适当的预防措施

    21710

    位与模的对白

    我们知道在程序中的所有数在计算机内存中都是以二进制的形式储存的,而位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。...xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19951223作为密钥。...处理负数 这个可以用总结的模板套路,不妨尝试这道题371....两整数之和,使用使用模板,因为在计算加法的时候,第一步都是要先处理符号问题,以及在最后一步再次处理符号问题 a &= 0xFFFFFFFF b &= 0xFFFFFFFF while b: carry...所以我们要记录下每次相加会产生的进位,我们注意到其实只有相同位均为 1 的时候下一位相加才会产生进位,所以我们可以使用与,然后左移一位用到下一位的计算上去。

    1K00

    常用的进制

    第0位:符号位,0表示正数,1表示负数 S第1位到第11位「11位指数」:储存指数部分 E第12位到第63位「52位尾数」:储存小数部分(即有效数字)F注:尾数部分在规约形式下第一位默认为1(省略不写)...十进制decimal 转 二进制binary整数转二进制用十进制的值一直除以2,直到商为0结束,把每一次取到的余数,从末尾到开始串起来即可。...number.toString(radix); 把一个十进制数字转换为radix进制的字符串,如果不写radix,默认是10进制浮点数转二进制用十进制浮点数乘以2,每一次取整数部分,把剩下的小数部分继续乘以...进制数,一般会以’0x‘开头,如:0x16  `1*16^1+6*16^2=22`  0x只是一个标识- 其他进制如3进制、4进制等转10进制计算方法与上述相同。...我正在参与[2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!](https://cloud.tencent.com/developer/article/2352251)

    83530

    千万别小看这些运算符背后的逻辑

    如果操作数都是字符串,进行字符串的拼接。 如果操作数是对象,会转换为原始值(一般是先调用valueOf(),日期对象比较特殊,会调用toString()),得到的原始值不再被强制转换为数字或字符串。...var a = -1; a >> 2; // -1 // 如果用负数的补码形式进行算术右移,高位补1 如果你自己写几个右移运算表达式做试验,你就会产生一个疑惑,为什么有的正数在带符号右移后却变成了负数...,比如下面这个: 2147483648 >> 31 // -1 这是因为32位的最大带符号正整数是231 - 1,即2147483647,转换为二进制是0111 1111 1111 1111 1111...在带符号二进制表示法中,正数和负数首尾相连,形成一个环,在计算机可表示的范围内,溢出的那个数字在某种意义上能在另一个起点找到。 ?...因此移位后,原来的负数可能变成正数。可以简单记忆为“低位舍弃,高位补0”。

    1K30
    领券