首页 > 其他分享 >位运算符:原码、反码、补码

位运算符:原码、反码、补码

时间:2022-09-23 18:34:22浏览次数:40  
标签:11111111 反码 00000000 补码 运算符 原码

位移(涉及到二进制中的原码,反码,补码)

⭐必记↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓:

对于有符号的数而言,有以下几点

1.二进制的最高位是符号位:0表示正数,1表示负数(区别1为真,0为假)

2.正数的原码,反码,补码都相同(三合一)

3.负数的反码=他的原码符号位不变,其余位取反(0变1,1变0)

4.负数的补码=他的反码+1

5.0的反码和补码都是0

6.计算机运算以 补码 的形式来运算(方便把正数和负数统一起来)


 

常见的位运算符:

 

 

 例子(区分取反和反码):

~2=首先得到2的补码=因为2是正数,所以它的补码等于原码

=四个字节有32位(一个int是4字节,一个字节是八位)

=00000000  00000000  00000000  00000010

=取反得到取反的补码11111111 11111111 11111111 11111101

=补码转原码

=最高位符号数是1

=是负数,先求反码(反码=补码-1)

=11111111 11111111 11111111 11111100

=将反码转为原码10000000 00000000 00000000 00000011

=-3


 

~-5=4


 

2&-3=获取2的补码和-3的补码

=2的补码为:00000000 00000000 00000000 00000010,

-3的原码为:10000000 00000000 00000000 00000011,

-3的反码为:11111111 11111111 11111111 11111100,

-3的补码为:11111111 11111111 11111111 11111101,

=按位与得到:00000000 00000000 00000000 00000000,

=0


 

2|3=3


 

2^3=1


 

位运算符和移位运算符(同样是处于补码情况下运算)

>>和<<:算术右移和算术左移

>>算术右移:低位溢出,符号位不变,用符号位补溢出的高位

<<算术左移:符号位不变,低位补0

例子

int a=1>>2;  // a相当于1/2/2=0

int b=10>>2;  // a相当于10/2/2=2(定义是正数,小数部分丢失)

int c=-1>>2;  //如下

-1的原码:10000000 00000000 00000000 00000001

-1的反码:11111111 11111111 11111111 11111110

-1的补码:11111111 11111111 11111111 11111111

-1>>2:(正数左边补0,负数左边补1,右边舍弃)

得到:11111111 11111111 11111111 11111111(已经右移2位,这是补码)

转反码(补码-1):11111111 11111111 11111111 11111110

转原码:10000000 00000000 00000000 00000001

结果为-1

int d=1<<2;  //


 

练习题(答案是白色字体):

~2=-3

2&3=2

2|3=3

~-5=4

13&7=5

5|4=5

-3^3=-2

标签:11111111,反码,00000000,补码,运算符,原码
From: https://www.cnblogs.com/MorningMaple/p/16721134.html

相关文章

  • 4.运算符表达式和语句
    =数据对象:泛指数据在内存的存储区域左值:表示可以被更改的数据对象右值:能赋给左值的量+:加intx=10+10;printf("%d\n",x);//20-:减intx=10......
  • lua:三元运算符
    lua里面没有类似C++的三元运算符a?b:c。第一种实现if-else--三元运算符functioniif(condition,a,b)ifconditionthenreturnaelser......
  • 变量的命名规范 运算符
    变量的命名规范所有变量,方法,类名:都要做到见名知意类成员变量:首字母小写和驼峰原则:例如monthSalarylastName除了第一个单词后面单词首字母大写局部变量:首字母小写和驼......
  • js取补码并转换为2进制
    (-1>>>0).toString(2)//返回结果'11111111111111111111111111111111'(4>>>0).toString(2)//返回结果 '11111111111111111111111111111100'如何计算一个32位2进制......
  • php两个问号??表示什么意思,PHP两个问号运算符,双问号表达式
    说在php源代码中看到有两个问号??不知道是什么意思。其实两个问题??是php7新推出的表达式,c=a??b;表示如果a非空,则c=a,如果a为空,则c=b;  php7以前经常使......
  • 关系运算符重载,以及在关系运算符重载发现的函数参数什么时候需要用引用
    在学习关系运算符重载的时候,看见重载函数中的函数参数使用的是引用类型,于是在思考为什么需要用引用,而不是非引用,例如:引用格式:booloperator==(Person&p)非引用格式:bool......
  • Go语言基础之运算符
    运算符Go语言内置的运算符有:算术运算符关系运算符逻辑运算符位运算符赋值运算符算术运算符运算符描述+相加-相减*相乘/相除%求余......
  • 运算符
    运算符算术运算符算术运算符:+,-,*,/,%,++,-- ​​publicclassDemo5{publicstaticvoidmain(String[]args){//二元运算符  +,-,*,/,%inta=......
  • 运算符重载
    运算符重载一、加号重载运算符-实现两个自定义数据进行相加classPerson{public:Person(){};Person(inta,intb){this->m_A=a;......
  • 二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
    1.语言1.1机器语言人和人沟通的桥梁:语言人与计算机打交道-->学习计算机的语言-->什么是机器语言#我们目前主流的电子计算机!状态:0和1#最早的程序员:穿孔卡带!加......