首页 > 编程知识 正文

位逻辑运算符怎么运算,按位取反运算

时间:2023-05-04 00:49:49 阅读:39447 作者:4701

程序中的所有数量都以二进制形式存储在计算机内存中。 位操作是编程中的位模式或二进制的一项和二元操作。 在许多旧的微处理器中,位运算比加减运算快一些,而普通位运算比乘除运算快很多。 在现代体系结构中,情况并非如此。 位运算的运算速度通常与加法运算相同。 比乘法还快。 (摘自维基百科)

运算对CPU友好,是程序的优化手段,也是大型制造商面试时经常提到的话题。 在日常编程中用于运算也可以实现很多有趣的事情。 作为计算机相关专业的毕业生,至今没有使用过比特运算,真是耻辱。 于是最近恶补了相关知识,在这里简要记录。

比特运算符包括反转、逐比特或逐比特异或、逐比特和; 对于比特,也可以进行移位、左移运算、左移操作、高位比特舍弃、低位比特补充0; 右移位运算、右移位操作、无符号数、对高位比特为0、有符号数、对高位比特补充符号比特。

已知在C/C中,一个char型变量在存储器中占一个字节,即8个比特,实际上各个比特可以被用作开关以生成标志比特等。

基本位运算符

介绍位运算符的操作。 如果and运算的两个位都为1,则结果为1。 否则为0。 例如,可能是1 0 0 1 1

1 1 0 0 1

-------------请参阅

如果1 0 0 0 1|或运算的两个位都为0,则结果为0,否则为1。 例如,1 0 0 1 1

| 1 1 0 0 1

-------------请参阅

1 1 0 1 1^异或运算,如果两个位相同则为0,如果不同则为1,例如1 0 0 1 1

^ 1 1 0 0 1

-------------请参阅

反算00010~,0等于1,1等于0。 例如~ 1 0 0 1 1

-------------请参阅

0 1 1 0 0左移运算、左移操作、舍弃高位、低位补充0,例如int a=8;

a 3;

班次前: 000000000000000000000000000000000000000000000000

移位后: 000000000000000000001000000右移位运算、右移位操作、无符号数、高位为0、有符号数、高位为0,例如unsigned int a=8;

a 3;

班次前: 000000000000000000000000000000000000000000000000

班次后: 00000000000000000000000000000000000000000000000001

int a=-8;

a 3;

位移前: 11111111111111111111111111111111111111111000

位移前: 1111111111111111111111111111111111111111111111111111111111111111111111

以上给出了位操作中的基本算子,利用这些基本运算,可以利用二进制的一些性质,实现例如快速乘除、两个数交换、奇偶校验判断、绝对值求解、高低位交换、逆序、高速统计1个数等操作。

以统计二进制中的1个数为例,计算34520进制中的1个数:

计算其a=(a-1 )的结果。 第一次:计算前: 1000 0110 1101 1000计算后: 1000 0110 1101 0000

第二次:计算前: 1000 0110 1101 0000计算后: 1000 0110 1100 0000

第二次:计算前: 1000 0110 1100 0000计算后: 1000 0110 1000 0000

因为很容易看到每次计算二进制文件时都会减少一个1,所以可以使用count=0的方法进行统计

wile(a ) {

a=a(a-1 );

出局;

}

很容易看出,通过活用位运算,运算效率大幅提高。 由于存储在计算机中进行处理的是二进制,因此位运算也很符合计算机的处理逻辑。

逐位反转

除以上计算外,还有按位逆计算。 以下简要记录。

在进行逐位翻转之前,必须首先了解原始代码、完成代码、翻转代码和翻转代码。 原代码:正数是其二进制本身;

负数是符号位为1、数值部分取x的绝对值的二进制数。

反符号:正反符号与原符号相同

负数的符号比特为1,其他比特的原符号相反。

补数)正补数与原码、反码相同;

负数的符号比特为1,其他比特的原符号反转,未比特加1。 (反相末尾减去1 ),或者负数的补数是其绝对值反相的位数加上1 ) ) ) ) )。

反过来说,简单的0等于1,1等于0

要按位取,必须涉及上述概念。 要理解这个运算符的计算方法,首先要理解存储器中存储了二进制数,二进制数作为补码存储在存储器中。

以计算正数9的每位反转为例,计算步骤如下。 (注:前4位为符号位(-原符号: 0000 1001

-计算反符号:0000 1001 (与正反符号相同的原符号) )

-补数:0000 1001 (与正补数相反的符号) () ) ) ) ) ) ) ) ) ) ) ) )

-弥补反: 1111 0110 (满位0为1,1为0 )

-倒数: 1111 0101 (末位负1 ) ) ) ) ) ) ) )。

-计算源代码: 1111 1010 (其他位相反) () ) ) ) ) ) ) ) 65 () ) )

总结规律,(~x=-(x1 ) ) ) ) ) ) ) ) )。

对位取反的总结到此结束,但关于位取反的用途,现在博客的知识有限,欢迎补充。

逐位反转和反转的区别:在c语言中

! 表示逻辑相反。 也就是说,将所有非0的数值(相当于1 )设为0,将0设为1。

~表示按位反转。 也就是说,在数字二进制表示中,将0设为1,将1设为0。

参考文献

-----------------

Author: Frytea

Title:计算机基础的位运算|逐位反转

link :https://blog.fry tea.com/archives/424 /

版权所有3360 thisworkbytl-songislicensedunderacreativecommonsattribution-non commercial-share alike 4.0国际许可证

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。