C语言视频 VS2015:[20]位运算符

Visual Studio 2015的发布,跟随而来的相关的教程的空白,这里讲逐步在Visual Studio 2015上讲解C语言相关的系列视频教程经验(注:由于视频修改难度大,所以先暂时发布文档,视频后期逐步补上),本文主要涉及:
① 按位取反位运算符:~
② 按位求与位运算符:&
③ 按位求或位运算符:|
④ 按位异或位运算符:^
⑤ 按位右移位运算符:>>
⑥ 按位左移位运算符:<<

简述

  • 01

    位运算符跟我们前面介绍的 逻辑运算符的运算逻辑是一致的,区别在于: ① 逻辑运算符是把整个操作数当做整体来判断,非0就是0,即可以等价替换成1来进行操作; 位运算符是把数据的二进制形式中每一位当做一个整体来进行处理; ② 逻辑运算符是宏观上的操作; 位运算符是微观上的操作 ;

  • 02

    按位取反位运算符 ~对应于 逻辑运算符 ! 按位求与位运算符 &对应于 逻辑运算符 && 按位求或位运算符 |对应于 逻辑运算符 || 当然位运算符还多了三个运算符: 按位异或运算符 ^ 按位右移位运算符:>> 按位左移位运算符:<<

~

  • 01

    ① 通过快捷键F1打开msdn; ② 输入 One's Complemet Operator; ③ 在列表选项里面选择 One's Complement Operator; 于是便打开了msdn对于按位取反运算符的解释; 注:在国外书籍或者msdn中把按位取反运算符称为“ 一的反码算子”有时候也称为“ 按位反码”,

  • 02

    对操作数的每一位进行反码操作,也就是说,对于每一位而言,如果这一位是1,那么结果就是0,如果这一位是0,那么结果就是1; ① 完成下图的代码; ② 使用快捷键F5进入调试模式; ③ 使用快捷键Ctrl+Alt+W,1,调出监视窗口; ④ 在监视窗口使用16进制显示; 由于16进制的每一位对应到2进制中就是4位,所以 对2进制的每一位取反,相对于16进制而言就是用16进制的F(10进制的15)减去当前位的值,所以 ① 由于-1的16进制是0xffffffff,所以对他的每一位取反就是: 等价于:0x(f-f)(f-f)(f-f)(f-f)(f-f)(f-f)(f-f)(f-f) 等价于:0x00000000 于是结果就是0 ② 由于 12345的16进制是 0x00003039: 等价于:0x(f-0)(f-0)(f-0)(f-0)(f-3)(f-0)(f-3)(f-9) 等价于:0xffffcfc6

  • 03

    下图显示了逻辑运算同算术运算的结果的差异

&

  • 01

    ① 通过快捷键F1打开msdn; ② 输入 & Operator; ③ 在列表选项里面选择 bitwise Operator; 于是便打开了msdn对于按位求与运算符的解释;

  • 02

    按位求与运算符,如果第一个操作数与第二个操作数对应位置上的bit值都是1,那么对应位置的结果就是1,否则为假; 对于任何进制而言,如果某一位是0,那么与运算的结果就是0;对于16进制而言,如果某一位是F,那么运算结果就是另一个操作数对应的值; 下图的例子同时演示逻辑运算符&&和按位运算符&的使用区别; ① 由于-24的16进制是0xffffffe8, 34326的的16进制是0x00008616, 由于0xffffffe8的前6位都是f,所以结果的前6位是0x00008616的前6位; 0xe8对应的二进制是:1110 1000 0x16对应的二进制是:0001 0110 进制与操作结果是:     0000 0000 所以最终的结果是:0x0000 8600 ② 由于-24不为0,为真,所以在逻辑学里面可以用1代替; 同理 3436也可以用1来代替,于是 (-24 && 34326) 等价于 (1 && 1) 于是结果便是 1

|

  • 01

    ① 通过快捷键F1打开msdn; ② 输入 | Operator; 于是便打开了msdn对于按位求或运算符的解释;

  • 02

    按位求或运算符,如果任一操作数的对应位为1,那么结果的对应位为1,否则为0; 对于任何进制而言,如果某一位是0,那么与运算的结果就是另一个操作数对应位的值;对于16进制而言,如果某一位是F,那么运算结果就F; 下图的例子同时演示逻辑运算符||和按位运算符|的使用区别; ① 123的16进制是0x0000007b, -14343的16进制是0xffffc7f9; 由于0x0000007b的前6位是0,所以结果的前6为是0xffffc7; 后两位 0x7b 的二进制:0111 1011 后两位 0xf9 的二进制:1111 1001 按位或的结果是: 1111 1011即16进制的0xfb 于是总的结果是:0xffffc7fb; ② 由于123不为0,为真,所以在逻辑学里面可以用1代替; 同理 -14343也可以用1来代替,于是 (-23&& -14343) 等价于 (1 || 1) 于是结果便是 1

^

  • 01

    下图是msdn对于按位异或的解释

  • 02

    按位异或将比较两个操作数中的每一位,如果一个操作数对应位是1,另一个操作数对应位是0,那么结果是1,否做结果是假; 对于任何进制而言,如果某一位是0,那么异或运算的结果就是另一个操作数对应位的值; 对于16进制而言,如果某一位是F,那么运算结果是另一操作数的反码(取反); 如下图由于: 123的16进制是0x0000007b, -14343的16进制是0xffffc7f9; 由于0x0000007b的前6位是0,所以结果的前6为是0xffffc7; 后两位 0x7b 的二进制:0111 1011 后两位 0xf9 的二进制: 1111 1001 按位或的结果是:          1000 0010的16进制的0x82 所以总的结果便是:0xffffc782

  • 03

    按位左移:左操作数的每一位向左移动右操作数位,高位舍弃,低位补0; 如下图的例子: ① 123 的16进制:0x0000007b 对应的二进制:0000 0000 0000 0000 0000 0000 0111 1011 向左移动三位:0000 0000 0000 0000 0000 0011 1101 1 000 换成16进制后结果:0x00 00 03 d8 ② ③ 同理 ④ -2140847327的16进制:0x80654321 对应的二进制:1000 0000 0110 0101 0100 0011 0010 0001 向左移动2位:  0000 0001 1001 0101 0000 1100 1000 01 00 换成16进制后结果:0x01 95 0c 84 通过一次左移运算,将 -2140847327 转成了正的 26545284

>>

  • 01

    右移运算相对于左移运算要复杂一下,右移运算分为两种: ① 无符号数的 逻辑右移运算; ② 有符号数的 算术右移运算;

  • 02

    无符号数的 逻辑右移运算 同左移运算一样,左操作数的每一位向右移动右操作数位,低位舍弃,高位补0; 如下图所示,由于 ① 123 的16进制:0x0000007b 对应的二进制:0000 0000 0000 0000 0000 0000 0111 1011 向左移动3位: 0000 0000 0000 0000 0000 0000 0000 1111 对应的16进制:0x00 00 00 0f ②的同理不再演示;

  • 03

    有符号数的称为算术右移,在进行移位的时候需要考虑符号位,左操作数的每一位向右移动右操作数位,低位舍弃,高位补 符号位(即二进制位的最高位); 注:正数的最高位是0,负数的最高位是1 ① 123 的16进制:0x0000007b 对应的二进制: 0000 0000 0000 0000 0000 0000 0111 1011 其对应的最高位是 0, 向左移动3位: 0000 0000 0000 0000 0000 0000 0000 1111 对应的16进制:0x00 00 00 0f ② -14343的16进制:0xffffc7f9 对应的二进制: 1111 1111 1111 1111 1100 0111 1111 1001 其对应的最高位是:1 想左移动4位后: 11111111 1111 1111 1111 1100 0111 1111 对应的16进制是:0xff ff fc 7f

  • 04

    方便他人亦是方便自己,如果觉得还行就点下 下边的 投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

(0)

相关推荐

  • C语言视频 VS2015:字符

    本经验主要涉及: ①字符和字符串区别: ②字符的特性: 本人自己看尹,cheng的视频整理的,希望对大家有帮助 新建项目 01 新建项目: 或者使用快捷键:Ctrl+Shitf+N 如下图所示 02 ...

  • C语言视频 VS2015:[3]IDE界面介绍

    Visual Studio 2015的发布,跟随而来的相关的教程的空白,这里讲逐步在Visual Studio 2015上讲解C语言的系列经验,本经验主要涉及: ① Visual Studio 201 ...

  • C语言视频 VS2015:数据存储低字节存储低位

    本经验主要涉及: ①低位在低字节,高位在高字节,电脑 手机 低位在低字节,高位在高字节: ②unix 低位在高字节,高位在低字节 : 本人自己看尹,cheng的视频整理的,希望对大家有帮助 新建项目 ...

  • 编程知识基础C语言位运算符详解

    C语言提供了六种位运算符:    &     按位与    |      按位或    ^      按位异或    ~      取反    <<    左移    >&g ...

  • 位运算符详解

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能.如果要开发高效率程序,位运算符是必不可少的.位运算符用来对二进制位进行操作,包括:按位与(&).按位或(|).按位 ...

  • c语言怎么保留两位小数

    对于c语言保留两位小数有些小伙伴还是有点迷茫,小编带大家一起去看看怎么保留两位小数 操作方法 01 我的想法是,就进位,那么我们可以让第三位加上5 02 ,因为最后第三位是舍掉的,因此无论怎么改变第三 ...

  • c语言如何保留两位小数

    c语言如何让输出的数据只保留两位小数呢?其实很简单 操作方法 01 打开dev c++,创建一个源代码窗口 02 输入一段代码.这段代码的意思是,输入一个类型为浮点数的数值.输出一个浮点数 03 运行 ...

  • C语言视频9-函数

    C语言是一种计算机程序设计语言.它既具有高级语言的特点,又具有汇编语言的特点.它由美国贝尔研究所的D.M.Ritchie于1972年推出.1978后,C语言已先后被移植到大.中.小及微型机上.它可以作 ...

  • C语言视频OS X系统 :如何用Xcode写C语言程序

    如何用在OS X系统写一个简单的C程序,本经验主要涉及: ① 如何在Xcode创建一个C程序: ② 如何调试程序: 本人自己看尹,cheng的视频整理的,希望对大家有帮助 创建C程序 01 单击Cre ...