c语言位操作(代码片段)

等不到星光等时光呀 等不到星光等时光呀     2023-01-15     480

关键词:

C语言位操作

一、常用位操作符

位与&无符号数有符号数
位或|逻辑左移<<算数左移<<
位异或^逻辑右移>>算数右移>>
位取反~

1、位与

真值表:

&01
000
101

3 & 5 = ?

​ 0b0011 (3)

& 0b0101 (5)


= 0b0001 (1)

拓展:&(按位与)与&&(逻辑与)的区别

逻辑与是将运算的俩个数看做一个整体,而整体结果如果位0,则该数被定义成逻辑假(0);如果该数不为0(不管是正的还是负的),则被定义为逻辑真(1)。

3 && 5 = 1

3 && 0 = 0

3 && -5 = 1

2、位或(|)

真值表:

|01
001
111

3 | 5 = ?

​ 0b0011 (3)

| 0b0101 (5)


= 0b0111 (7)

拓展:&(按位或)与&&(逻辑或)的区别

逻辑或是将运算的俩个数看做一个整体,而整体结果如果位0,则该数被定义成逻辑假(0);如果该数不为0(不管是正的还是负的),则被定义为逻辑真(1)。

3 || 5 = 1
    
0 || 0 = 0
 
3 || -5 = 1

3、位取反(~)

将操作数的二进制数的位逐个按位取反(1变0,0变1)。

真值表如下:

~1 = 0
~0 = 1
~10 = ?
0b1010 (10) 01010 (10)

​ 0b0101 (5) 10101

​ 11011(-11)

拓展:~(位取反)与!(非)的区别

!(非)是将操作数整体看成一个整体,而这个整体如果是0,则该数被定义成逻辑假(0);如果该数不为0,(不管是正还是负的),则被定义成逻辑真(1)。

上面是正常的计算取反的方法,但是在计算机中并不是这样的,需要使用下面的方法。

这里先说一下二进制在内存的存储:二进制数在内存中以补码的形式存储

另外,正数的原码、补码和反码都相同

在计算机中,二进制数在内存中以补码的形式存储,因此要求出其原来的值,就需要在对该数求其补码。正数的原码补码,反码都相同。

从负数的原码求反码和补码解题方法和步骤

(1)保持符号位的1不变,将数字部分的每一位求反(1改为0,0改为1),就得到了反码。

(2)在反码的末位上加1,即得到补码。

4、位异或(^)

俩个数如果结果不等,则其结果为1,相等为0.

真值表如下:

^01
001
110

3 ^ 5 = ?

​ 0b0011 (3)

^ 0b0101 (5)

= 0b0110 (6)

5、左移位(<<)

左移位就是将一个操作数的各二进制位全部左移若干位,左边移出去的二进制位丢弃,右边突出的二进制位补0。

5 << 2 =?

0b 0000 0101 (5)

0b 0001 0100 (20)

每进行一次左移位,就是将原来的数乘2。 5x2x2=20

6、右移位(>>)

右移是将一个操作数的各个二进制位全部右移若干位,左边的二进制补0或补1,(如果操作数是无符号数或有符号整数就补0,如果是有符号负数就补1),右边的二进制位丢弃。

负数的存储是以补码的形式存储的,移位是对其负数对应的补码进行的移位,因此原来的数还要进行求原码。

-5 >> 2 = -2

​ 0b1111 1011 (-5)

有移一位 :0b11111101 (-3)

有移俩位: 0b11111110 (-2)

二、位操作与寄存器

1、寄存器特定位清零用&

如果希望将一个寄存器的某些特定位变成0而不影响其他位,可以构造一个合适的1和0组成的数,和这个寄存器原来的值进行位与操作,就可以将特定位清零。

假设原来32位的寄存器REG的值为0xAAAAAAAA 我们希望将bit9~bit16置为0而其他位不变,将这个数与0X0000 FF00进行位与即可。

REG & = 0x0000 FF00

2、寄存器特定位置1用|

如果希望将一个寄存器的某些特定位变成1而不影响其他位,可以构造一个合适的1和0组成的数,和这个寄存器原来的值进行位或操作,就可以将特定位置1。

假设原来32位的寄存器REG的值为0xAAAA00AA 我们希望将bit9~bit16置为1而其他位不变,将这个数与0X0000 FF00进行位或即可。

REG | = 0x0000 FF00

3、寄存器特定位取反用~

如果希望将一个寄存器的某些特定位0变成1,1变成0,,即取反而不影响其他位,可以构造一个合适的1和0组成的数,和这个寄存器原来的值进行异或操作,就可以将特定位清零。

假设原来32位的寄存器REG的值为0xAAAAAAAA 我们希望将bit9~bit16取反而其他位不变,将这个数与0X0000 FF00进行位异或即可。

REG ^ = 0x0000 FF00

c语言操作符详解(代码片段)

C语言操作符详解文章目录C语言操作符详解1C语言位操作符1.1右移操作符>>1.2左移操作符<<1.3位操作符(&|^)1.4sizeof操作符1.5~按位取反1C语言位操作符1.1右移操作符>>右移操作符包括下面两种1.算术右移右边... 查看详情

c语言-常用寄存器位操作总结(代码片段)

STM32学习笔记-常用寄存器操作常用的寄存器位操作总结1.常用的位操作操作含义&与相同为1,不同为0|或不同为1,相同为0^异或相同为0,相异为1~取反0变1,1变0<<左移左移若干位,高位丢弃,低位补0>>右移右移若干位,... 查看详情

那些一看就会一放就忘的c语言知识(代码片段)

本文列举了部分学习中比较常见的一些C语言基础知识,希望能对大家有所帮助。01位操作下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作:(六种位操作)下面,重点... 查看详情

入门c语言——初识c语言(代码片段)

一、引言本系列文章主要内容主要是我对C语言的初步认识以及知识小结。本文主要大概讲一讲操作符的基本知识点。二、GET到的知识(1)算数操作符:(2)移位操作符(作用于二进制位):(3)位操作符:(4)赋值操... 查看详情

c语言操作符学习总结(代码片段)

c语言中关于操作符部分的学习,可以主要分为两个部分:操作符和表达式。这里首先是列举各种操作符,在C语言中,一般主要的操作符有这么几种:算数操作符,移位操作符,位操作符,赋值操作符,单目运算符,关系操作符... 查看详情

c语言深度剖析深入理解c语言中的移位操作符(代码+图解)(代码片段)

文章目录移位操作符原码反码补码左移操作符正数左移负数左移右移操作符算术右移正数算术右移负数算术右移逻辑右移移位操作符分为:左移操作符:<<右移操作符:>>其实讲移位操作符之前,先来了解... 查看详情

五c语言之操作符(代码片段)

目录1、各种操作符的介绍。1.1操作符1.1.1 算术操作符 1.1.2 移位操作符1.1.3位操作符1.1.4赋值操作符1.1.5复合操作符1.1.6单目运算符1.1.7关系操作符1.1.8逻辑操作符1.1.9条件操作符1.1.10逗号表达式1.1.11 下标引用、函数调用和结构成... 查看详情

初始c语言(c语言初阶)(代码片段)

目录10、操作符(运算符)算数操作符移位操作符位操作符赋值操作符单目操作符 关系操作符逻辑操作条件操作符逗号表达式下标引用、函数调用和结构成员11、常见关键字11.1、关键字typedef11.2、关键字static10、操作符&#x... 查看详情

r语言关系操作符:><=!=>===(代码片段)

R语言关系操作符:>、<=、!=、>=、==、R语言关系操作符我们以向量为基础来查看R语言关系符操作的逻辑步骤,操作没有特别指定一般都是按位操作;算子描述例子>第一个向量的元素是否按位大于第二个向量的元素;v<... 查看详情

c语言操作符和表达式详细讲解(代码片段)

文章目录1、操作符分类:2、算术操作符3、移位操作符4、位操作符5、赋值操作符6、符合赋值符7、单目操作符:只有一个操作数的操作符8、关系操作符9、逻辑操作符10、条件操作符11、逗号表达式12、下标引用、函数调... 查看详情

c语言操作符和表达式详细讲解(代码片段)

文章目录1、操作符分类:2、算术操作符3、移位操作符4、位操作符5、赋值操作符6、符合赋值符7、单目操作符:只有一个操作数的操作符8、关系操作符9、逻辑操作符10、条件操作符11、逗号表达式12、下标引用、函数调... 查看详情

初识c语言之二(代码片段)

...把博客这一块落下了,今天开始博主会一直更新关于C语言的知识从入门到进阶的ÿ 查看详情

初识c语言之二(代码片段)

...把博客这一块落下了,今天开始博主会一直更新关于C语言的知识从入门到进阶的ÿ 查看详情

那些一看就会一放就忘的c语言知识(代码片段)

本文列举了部分学习中比较常见的一些C语言基础知识,希望能对大家有所帮助。01位操作下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作:(六种位操作)下面,重点... 查看详情

入门c语言——初识c语言(代码片段)

一、引言本系列文章主要内容主要是我对C语言的初步认识以及知识小结。本文主要大概讲一讲操作符的基本知识点。二、GET到的知识(1)算数操作符:(2)移位操作符(作用于二进制位):(3)位操作符:(4)赋值操... 查看详情

关于c语言操作符的总结(代码片段)

整理了一些C语言中的操作符,简单介绍了一下部分重要操作符,也算学习操作符的一些收获吧。一、C语言操作符分类算数操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符二、... 查看详情

c_cpp位操作(代码片段)

查看详情

c_cpp位操作(代码片段)

查看详情