原码、反码、补码,以及右移运算符、左移运算符、无符号右移运算符,今天来个一网打尽
原码
原码:一个整数按照绝对值的大小转换成的二进制数,称之为原码。譬如int类型整数5的原码就是00000000 00000000 00000000 00000101【因为int类型占用4个字节,也就是32位】
反码
反码:将二进制数的按位取反,所得到的的新二进制数称为原二进制数的反码。【什么叫取反,取反就是1变0,0变1】
例如5的反码就是11111111 11111111 11111111 11111010。
补码
补码:反码加一就是补码,也就是说,要得到一个数,就要得到他的原码,再取反得到反码,反码加一得到补码。那么00000000 00000000 00000000 00000101的补码就是11111111 11111111 11111111 11111011。
注意:计算机中,负数以其正值的补码表示
也就是说,-5在计算机中表示为11111111 11111111 11111111 11111011。
无符号右移运算符 >>>
无论参与运算的数字是正数还是负数,在运算是都是在高位补0。例如5>>>1,结果为2。那如果是-5,无符号右移之后就变成2147483645。【是不是很夸张🐮】
右移运算符 >>
如果是正数,那么右移运算时是在数的高位补0,但如果是负数,右移运算是在高位补1。如果是5,右移只有变成2,-5>>1之后变成-3。
负数的右移是向下取整,举个例子:-5>>1并不是-2,而是-3,-6右移1位也是-3。
左移 <<
左移运算是移除高位的同时在数的低位补0。左移n位,相当于乘于2n。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通