C#原码,补码,反码以及取反
在取反的二进制数中最高位是符号位(0代表正数,1代表负数)
原码:将数值转化为2进制数,将最高位数转变为相对应的符号位
反码:原码为正数的反码就是本身;
原码为负数的反码就是符号位不变,其余数 0变1,1变0。
补码:(当反码进行计算时出现了跨零的情况,计算结果就不正确了,补码就出现了)
正数的补码就是本身;
负数的补码是反码符号位不变,最后一位+1
按位取反(~)计算过程:
原码--->反码--->补码--->对补码按位取反(包括符号位也需要取反)
--->拿到取反后的补码--->对补码还原出反码--->对反码还原出原码
例:6
原码:0000 0110
反码:0000 0110(正数的反码是本身)
补码:0000 0110(正数的补码是本身)
对补码按位取反(包括符号位也需要取反):1111 1001
拿到取反后的补码:1111 1001
还原出反码:1111 1000(此时因为取反后为负数,按照规定:负数的补码是反码符号位不变,最后一位+1,所以补码的最后一位-1得到负数的反码。)
还原出原码:1000 0111(此时为负数,按照规定:原码为负数的反码就是符号位不变,其余数 0变1,1变0。所以除去符号位不变,其他位转变得到原码)
输出:-7
例:-7
原码:1000 0111
反码:1111 1000(原码为负数的反码就是符号位不变,其余数 0变1,1变0。)
补码:1111 1001( 负数的补码是反码符号位不变,最后一位+1)
对补码按位取反(包括符号位也需要取反):0000 0110
拿到取反后的补码:0000 0110
还原出反码:0000 0110(此时取反后为正数,按照规定:正数的补码就是本身,所以本身就是反码。)
还原出原码:0000 0110(按照规定:正数的反码就是本身,所以本身就是原码)
输出:6
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)