位运算及负数的表示
创始人
2025-05-31 07:45:03
0

std::bitset

输出二进制内容

引用头文件

语法:

std::bitset<要显示的二进制位数>(要显示的变量);

#include
int a {0b10101010111110111111111111111};
std::cout<(a)

结果为

111111111111

左移和右移

int a {0b11111111};
a<<=4;
std::cout<(a);
a>>=4;
std::cout<(a);

结果为11110000

结果为00001111

知识扩展*:左移n位,就是乘以2^n,右移n位,就是除以2的n次方

第5行a输出结果可能为00001111,也可能为11111111,因为a是个负数,正数前面补0,负数前面补1

负数的表示

负数都以补码的形式存在

原码

一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如 00000000 00000000 00000000 00000101是5的原码。

反码

将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

比如称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

反码是相互的,即后者也是前者的反码。

补码

反码加1称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

更多描述请点击

求反运算~

与运算 &

有0为0,两1为1

作用:一般用来保留高位

例:

0x2833,想要保留0x28,可以将0x2833&0xff00

或运算|

有1为1,两0为0

作用:一般升级到最大值

0x2833,想要将最高的两位调到FF,可以将0x2833|0xFF00

位运算之异或

a^b=c

c^a=b

b^c=a

a

/ \

b----------c

这三者呈三角形关系

0^0=0

1^0=1

1^1=0

并且有A^0=A A^A=0

并且B^A^A=B 因为B^A^A=B^(A^A)=B^0=B

然后可以利用他来交换AB的值 只要这样

A^=B

B^=A

A^=B

具体算法可以参照

异或的本质

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...