计算机按位取反[通俗易懂]

计算机按位取反[通俗易懂]取反过程1.转成二进制2.取补码3.补码的反码(符号位不变)4.反码加+1可以通过原码、反码和补码三者的含义及关系来介绍三者之间的换算关系:1、原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:[+1]原=00000001[-1]原=10000001第一位是符号位。2、反码

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

概念

*二进制数在内存中以补码的形式存储。

~是按位取反运算

可以通过原码、反码和补码三者的含义及关系来介绍三者之间的换算关系:
1、原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位。
2、反码
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
第一位是符号位。
3、补码
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
第一位是符号位。
注:补码的补码等于原码,如:-1的补码为11111111,则11111111的反码为10000000
补码为10000001(-1的原码)。


实例

~1=-2

步骤一:1的二进制码
0000 0001
步骤二:1的补码
0000 0001
步骤三:按位取反
1111 1110
步骤四:求其原码(负数的补码求其原码 是-1取反)
补码-1为
1111 1101
然后取反
1000 0010 为-2


~2 =1

步骤一:2的二进制原码
1000 0010
步骤二:2的补码(负数补码为取反+1)
取反
1111 1101
先+1
1111 1110
步骤三:按位取反(正数的补码还是其本身 ,补码->本身 不变)
0000 0001
其原码
0000 0001(为1)


实际运算举例
~5

简单:加1符号位变 变-6

~-5
简单:负数就是加1 符号位变 4

总结

在按位取反的过程中
注意计算机存储的是每个数的补码,所以先求其补码,然后全部位按位取反 再求其原码
再求其原码注意现在是正数还是负数

正数的反码是其本身
正数的补码是其本身
负数的反码是除符号位其他全部按位取反
负数的补码是反码+1

最后总结 求补码,按位取反,求原码为结果
最后总结 求补码,按位取反,求原码为结果
最后总结 求补码,按位取反,求原码为结果

新总结

符号位(变化) +其他全部变化

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170479.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ASP.NET页面事件:顺序与回传详解

    当页面被提交请求第一个方法永远是构造函数。您可以在构造函数里面初始一些自定义属性或对象,不过这时候因为页面还没有被完全初始化所以多少会有些限制。特别地,您需要使用HttpContext对象。当前可以使

    2021年12月26日
    37
  • 二叉树进行中序遍历的结果_层次遍历和中序遍历构建二叉树

    二叉树进行中序遍历的结果_层次遍历和中序遍历构建二叉树目录1.二叉树1.中序遍历1.二叉树1.中序遍历不论是二叉树、二叉排序树(搜索树),遍历是基础。至于什么是中序遍历,中规中矩的理论,可以参考这篇文章,二叉树中序遍历(递归+非递归)Java.,其中详细介绍了中序遍历实现的方法和结果,包括递归和非递归两种方式。…

    2025年11月15日
    3
  • 小数转int类型_怎样对结构体进行大小端转换

    小数转int类型_怎样对结构体进行大小端转换int16大小端转换:staticinlineuint16_tbswap_16(uint16_tx){  return(x>>8)|(x}int32大小端转换:staticinlineuint32_tbswap_32(uint32_tx){  x=((x>8)&0x00FF00FF); 

    2022年8月15日
    4
  • apache RewriteRule

    apache RewriteRule最近发现一个新的东西(可能以前一直没有注意)Apache中的rewrite_modul模块。可以将你的url得到的地址直接重新定义成自己想要的位置。 也就是说输入的URL可以重新定义成一个动态的地址。而且这个URL 不会被改写,动态地址是在后台执行然后返回数据。这个功能还可以使用在写程序时自己定义的CACHE,完全提高服务器负担,加快响应时间,这个就看

    2022年5月15日
    37
  • C语言程序设计第五版 谭浩强 第五版课后答案

    C语言程序设计第五版 谭浩强 第五版课后答案谭浩强C语言程序设计第五版第4章课后答案3.求两个正整数m和n,求其最大公约数和最小公倍数。#include<stdio.h>voidmain(){ intm,n,t,i,a=1; scanf(“%d%d”,&m,&n); if(m<n) { t=m; m=n; n=t; } for(i…

    2022年6月14日
    43
  • oracle9i如何卸载,教你怎么样卸载Oracle9i[通俗易懂]

    oracle9i如何卸载,教你怎么样卸载Oracle9i[通俗易懂]欢迎进入Oracle社区论坛,与200万技术人员互动交流>>进入在win2000企业版操作系统下,卸载Oracle9i:1、停止所有Oracle服务2、删除注册表中的所有关于Oracle项(1)在HKEY_LOCAL_MACHINE\SOFTWARE下,删除Oracle目录(2)在HKEY_LOCAL_MACHINE\SYSTE欢迎进入Oracle社区论坛,与200万技…

    2022年10月20日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号