美文网首页iOS开发
「C 基础」位运算

「C 基础」位运算

作者: _凉风_ | 来源:发表于2016-05-16 08:44 被阅读32次

0. 原码、补码、反码

初学者只做了解即可 见 张子秋 的博客

无论正负数,在内存中存储的都是补码
正数:反码 == 原码 == 补码
负数:反码 == ~原码
   补码 == 反码+1

1. & 按位 与「AND」

  • 功能:对应的两个二进位 均为1 时,结果 为1,否则 为0
  • 例子:9&5 = 1001&0101 = 0001,即 9&5=1
  • 规律:二进制中与** 1& **保持原位,与 0& 为0

2. | 按位 或「OR」

  • 功能:对应的两个二进位 只要有一个为1 时,结果 为1,否则 为0
  • 例子:9|5 = 1001|0101 = 1101,即 9|5=13

3. ^ 按位 异或「XOR,EOR」

  • 功能:对应的两个二进位 不相同 为1,否则 为0
  • 例子:9^5 = 1001^0101 = 1100,即 9^5=12
  • 规律:
    • 同一整数 相异或 为0,例:5^5=0
    • 不同整数 相异或 结果和顺序无关,例:567 = 576
    • 任何数 和 0 异或 结果不变,例:x^0 = x
    • 综上,xyx = xxy = 0^y = y

4. ~ 按位 取反「NOR」

  • 功能:对整数的 每一位取反,符号也位取反「取反:0取反为1,1取反为0
  • 例子:~9 = -10

5. << 左移

  • 格式:整数<<左移个数
  • 例子:x **<< **n
  • 实质:x * 2的n次方
  • 操作:把 x 的二进制位 向移动 n 个单位,高位丢弃,低位补 0

6. >> 右移

  • 格式:整数>>右移个数
  • 例子:x** >> **n
  • 实质:x / 2的n次方
  • 操作:把 x 的二进制位 向移动 n 个单位,低位丢弃,符号位不变
  • 注意:符号位也跟着移动, 右移不改变整数的正负, 最后符号位要调整为原来的数值
    正数 符号位为 0, 最高位补0
    负数 符号位为 1, 最高位补1「取决于编译器的规定,这里以MAC的编译器为准

7. 应用 「了解即可」

数值转换:

int a = 9;
int b = 6;
//1. 借助第三方变量
int temp;
temp = a;
   a = b;
   b = temp;

//2. 不借助额外空间,数学方法
a = b - a;
b = b - a;
a = b + a;

//3. 不借助额外空间,位运算
a = a ^ b;
b = a ^ b;
a = a ^ b;

奇偶判断:

int a=15; 
// 方法1 取模判断 
// 注:这里由于 printf()是有返回值「输出的字符串长度」 
// 所以可以用 三位运算符 条件?值:值 
a%2?printf(“奇数\n”):printf(“偶数\n”);

// 方法2 与1判断 
// 由于:奇数,二进制最后一位是 1 
// 偶数,二进制最后一位是 0 
// 1 & X = X的二进制最后一位 
a&1?printf(“奇数\n”):printf(“偶数\n”);

相关文章

  • 「C 基础」位运算

    0. 原码、补码、反码 初学者只做了解即可 见 张子秋 的博客 无论正负数,在内存中存储的都是补码正数:反码 ==...

  • 1.位运算符-Bit

    前言:位运算符的使用方式有两种。1)基础使用方式;2)c++新增bitset类1.基础使用1)位运算符 备注:1....

  • 巧妙运用C语言位运算

    巧妙运用C语言位运算,C语言是面向过程的,而C++是面向对象的 位运算 位运算的运算分量只能是整型或字符型数据,位...

  • 6、C++基础:位运算

    有一个unsigned long型整数,先要分别将其前2个字节和后2个字节用为两个unsigned int型整数输...

  • C语言:按位运算

    C语言:按位运算 C有这些按位运算的运算符& 按位的与| 按位的或~ 按位取反^ 按位的异或<< ...

  • 位运算 - 基础

    一、位逻辑运算 1、与运算: a & b 与运算,对应位都为 1,结果为 1,否则为 0相当于一般逻辑运算符 an...

  • 零基础到大神学习C语言必须要掌握的三点,一定要了解

    一.学好C语言的运算符和运算顺序 这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于...

  • 16_位运算符分析

    关键词: C语言中的位运算符、 左移和右移注意点、位运算防错准则、 位运算符和逻辑运算符的区别 1. C语言中的位...

  • 27、【Swift】高级运算符 - Advanced Opera

    Swift 运算符基本运算符高级运算符(包括 C 或 Objective-C 所有按位和移位运算符。) 与 C 的...

  • 嵌入式C语言的位运算

    想必大家都了解&&(且运算符),||(或运算符),在C语言的位运算中 ,位或运算|,位与运算&,异或^,取反~。等...

网友评论

    本文标题:「C 基础」位运算

    本文链接:https://www.haomeiwen.com/subject/ebcbrttx.html