大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
原码 反码 补码的相互转换
原码 反码 补码的转换 还是比较 简单基础的问题。之前学习java的时候就学过,后来忘记了,忘记了!!!,后来学了位移运算符,左移 右移 无符号右移 之后就由有点儿懵了。
原码,反码,补码
二进制中第一位是符号位,0表示正数,1表示负数。
以八位二进制数为例。
-
原码
十进制数正1的二进制原码 [+1] 原 = 0000 0001
十进制数负1的二进制原码 [-1] 原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以
8位二进制数的取值范围:[1111 1111 , 0111 1111]
对应十进制 [-127 , 127] 范围。 -
反码
反码的表示方法是:
1.正数的反码是其本身
2.负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [0000 0001]原 = [0000 0001]反
[-1] = [1000 0001]原 = [1111 1110] 反 -
补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
- 总结
在知道一个数原码的情况下:
正数:反码,补码 就是本身自己
负数:反码是高位符号位不变,其余位取反。补码:反码+1
练习
-A(二进制数)原码转为补码 ,先减一再按位取反 或者 先按位取反再加1 。
-A (二进制数)补码转化为原码 :按位取反加1 或减一再按位取反 注意第一位符号位不变。
符号位就是第一位,1是负数,0是正数。 不表示数值的大小
例子:
问:4补码为:0100 -4补码为:1100 ?
答:-4原码是 1000 0100 ; 反码(原码符号位不变,按位取反)是1111 1011 ;补码(反码加一)是 1111 1100
八位二进制中(假设是八位的):4 补码为:0000 0100 -4补码为:1111 1100
详解:
-4原码 转化为-4的补码过程 补码的转化
方法一: 1000 0100 减一 得1000 0011 按位取反得1111 1100
方法二 :1000 0100 按位取反得1111 1011 加一得 1111 1100
-4的补码转化为原码 按位取反但是符号位不变
方法一:1111 1100 按位取反 得 1000 0011 加一 0000 0100 取负数 得-4
方法二:1111 1100减一得 1111 1011 按位取反 1000 0100 取负数 得-4
记不住得话,记住,补码=原码按位取反再+1 ,原码=补码减一再按位取反 。
重点:
1.正数的,原码反码补码都相同。 以上规则是对于负数而言的。
2.正数与负数的原码 只差符号位的值,不一样 正数是0 负数是1 .
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/223083.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...