2018-06-06位运算

位运算

Ps:位运算符是指进行二进制的运算。C语言中提供的位运算包括,与(&)、或(|)、异或(^)、取反(~)、移动(“<<”或“>>”)这些逻辑。

[if !supportLists]1、[endif]位于运算的的逻辑:

与运算符(&):

当两个位进行相与是,只有两者都为“1”时结果才为“1”,其他都为“0”。&和&&相似两边都要满足“1”时才有结果,其他的都为“0”。

例如:0x8a & 0x45

         0x8a = 1000 1010

&

0x45 = 0100 0101

结果为 0000 0000,转化为16进制等于 0x00。

实例:     0x5d & 0x7c = 0x5c

0x79 & 0xa3 = 0x21

0xe2 & 0x83 = 0x82。


如果遇到八进制,那么将八进制转化为二进制进行计算,差的位数就往最前面补零。

         例如:0xe3 &025 

                   0xe3= 1110 0011

                    025 = 0001 0101

                   结果就为0000 0001,转化为十六进制等于0x01。



或运算符(|)

当两位进行相或时,两者中只要有一方为“1”,结果就为“1”,其他都为“0”,注意:位或是一个|,两个||是逻辑或。例:1|0 = 1  1|0 = 1  0|0 =0 0|1 = 1。

         例如:0x2b |0xf7

                   0x2b= 0010 1011

                   0xf7= 1111 0111

                   结果为1111 1111,转化为十六进制等于0xff

如果与(&)和或(|)同时运用,按照运算符优先级计算,有括号的先算括号里面的。

         例如:0xd3&(0xad | 057) = 0x83

                     0x43 |(0x62 & 0x7d) = 0x63


异或运算符(^)

当两个位进行异或时,两者相同皆为“0”,否则结果就为“1”。

         例如:0x6a ^0xf4

                    0x6a = 0110 1010

                    0xf4 = 1111 0100

                   结果为1001 1110,转化为十六进制等于0x9e。

注意:如下面列题所示,那么要先遵守(运算符优先级)。

         例1:0x68 & (0x3c^ 0x45)= 0x68

例2:0xe3 |(0x37^0xa6) = 0xf3




按位取反运算(~)

取反运算符(~),按二进制数计算,逐个取反(“0”变“1”,“1”变“0”)。

注:逻辑取反是真(在c语言中只要不是“0”的任何数都为真)变为假(只有“0”表示假)、假就变为真。

例如:

~0x9d --> 1001 1101 取反得 0110 0010转化为十六进制为0x62

~0xa4 --> 1010 0100 取反得 0101 1011转为十六进制为0x5b

         ~0xc3 --> 1100 0011 取反得0011 1100转为十六进制为0x3c。



左移(<<)

左移运算符(<<),用来把各个二进制数全部向左移动N个位,注意(高位丢弃,低位补“0”)。

                   例如:0x23 进行左移2位

                   拆解为二进制:00000000 0010 0011

                   高位丢弃:(00)0000 00100011

                   低位补零:00000000 1000 1100

                   表达式为:(0x23<<2)

                                                                           注:高位丢弃多少位,低位补上多少零。

右移(>>)

右移运算符(>>),用来把各个二进制数全部右移N个单位,低位丢弃,高位补“0”或是“1”。

                   例如:0x7e 进行右移2位

                   拆解为二进制:00000000 0111 1110

                   高位补零:(00)0000 0000 01111110

                   低位丢弃:     0000 0000 0111 1100(10 丢弃)

                   表达式为:0x7e<<2

                                                        注:低位丢弃,高位补零。如果最高位是“1”,那么就补“1”。


重点:

特定位清零时,用位与(&)计算。

例1:把0x7d的第2位和第3位进行清零,求表达式。注(第几位都是以下标的形式计算),步骤如下:

                    1、 0x7d拆分为二进制:0111 1100

                    2、    提出清零的数:0000 1100

                    3、            取反:1111 0011

                    1和3进行位与(&)得到结果:0111 0000

                    那么表达式就为:0x7d

&~(0x3<<2)。                



特定位置“1”时,用位或(|)计算。

                  口诀:清零取反要用与(&),某位置“1”要用或(|),

                             若要取反和交换,轻轻松松用异或(^)。

                            例1:把0xc7的第3—5位置1,求表达式。

                                     1、0xc7拆分为二进制数:1100 0111

                                     2、  提出置“1”的数:0011 1000

                                     1和2进行位或(|)得到结果:1111 1111

                                     那么表达式就为:0xc7 | (0x7<<3)


AAKhH�~-(�

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350