`

【C/C++和指针】深入讲解位运算

 
阅读更多

int、char、short等非浮点数在内存中是按照补码的形式存储的。

1)按位取反(~)

单目运算符,参与运算的数和结果均以补码方式出现。

功能:各位取反,如果首位为1则其真实值为:除符号位外,各位取反末尾加1。

示例:~100 = - 101

(100) 的二进制表示为: 0110 0100

~100 的二进制表示为: 1001 1011

所以等号左边=1001 1011

由于int、char、short均按照补码存储,则实际数为:1110 0100 = -101

2)按位与(&)
双目运算符参与运算的数和结果均以补码方式出现。
功能:是参与运算的两数各对应的二进位相与,1&1=1 , 1&0=0 。通常用来对某些位清0或保留某些位。

示例:9&5可写算式如下:

00001001 &00000101 = 00000001

a 的高八位清 0 , 保留低八位, a&255 运算 ( 255 的二进制数为0000000011111111)。

3)按位或(|)

双目运算符,参与运算的两个数均以补码出现。

功能:是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。
示例:9|5可写算式如下:

00001001|00000101 =00001101 (十进制为13)可见9|5=13

4) 按位异或(^)

双目运算符参与运算的两个数均以补码出现。

功能:是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。0^0=0, 1^0=1, 0^1=1, 1^1=0

示例:9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)

  (1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。
          10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6
  (2)实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:
     a=10100001,b=00000110
     a=a^b;   //a=10100111
     b=b^a;   //b=10100001
     a=a^b;   //a=00000110
(3)在汇编语言中经常是变量置零:

xor a,a



分享到:
评论

相关推荐

    C/C++指针详细讲解

    在开始讲解C/C++指针之前,首先要理解变量在内存中的存储实质。在计算机系统中,内存空间类似于一个存放数据的场所,每个内存位置都有一个唯一的地址,就像电影院座位的编号一样,方便我们找到并存取数据。在C或C++...

    c/c++参考手册

    2. **指针与内存管理**:深入讲解指针的概念、指针运算、动态内存分配(malloc/calloc/realloc/free)以及内存对齐。 3. **预处理器**:介绍宏定义、条件编译、头文件包含等预处理指令。 4. **结构体与联合体**:...

    c/c++和完整数据结构讲解

    《C/C++与完整数据结构讲解》是一份深入学习C/C++编程语言和数据结构的珍贵资源,由清华大学多位资深教师合力编著。这份资料专为热衷于算法研究的学生设计,旨在提升读者在计算机科学领域的核心竞争力。下面将详细...

    c/c++指针大突击

    在C/C++中,指针有多种操作,包括指针的算术运算和指针的类型转换。指针运算主要涉及加减操作,如`ptr + 1`会得到下一个元素的地址。需要注意的是,这种运算只适用于数组或动态分配的内存。类型转换则允许不同类型的...

    MATLAB与C/C++、FORTRAN语言混合编程[整理].pdf

    - 理解MATLAB与C/C++、FORTRAN之间的内存管理差异,特别是指针和数组的使用。 - 注意多线程和并发处理的问题,因为MATLAB有自己的并行计算工具箱,而在C/C++或FORTRAN中进行并发可能需要额外的同步机制。 - 优化代码...

    C/C++参考手册大全5本集合.chm

    《C/C++参考手册大全5本集合》是一个包含丰富的C和C++编程资源的压缩包,其中涵盖了C-C++函数手册、C++ API大全、C参考手册、C函数查询以及C语言库函数速查手册等多个实用文档。这些手册是程序员在学习和工作中不可...

    C/C++常见试题深入剖析

    《C/C++常见试题深入剖析》是一份针对C和C++编程语言的专项学习资料,旨在帮助学习者深化对这两种语言的理解,提升编程能力。在C++中,它涵盖了从基本语法到高级特性,包括面向对象编程、模板、异常处理等核心概念。...

    C/C++语言程序百例C/C++语言经典、实用、趣味程序设计编程百例精解(1)

    这本书深入浅出地介绍了C/C++语言的经典、实用和趣味性程序设计,旨在通过大量的实例帮助读者更好地理解和掌握这两种强大的编程语言。 在C/C++编程中,学习的重点通常包括基本语法、数据类型、控制结构、函数、指针...

    数组与指针的艺术.doc

    总之,《数组与指针的艺术》是一篇深入浅出的教程,旨在帮助C/C++程序员或初学者正确理解和有效利用数组和指针,以充分发挥这两种强大的工具在程序设计中的作用。通过细致的探讨和实例解析,文章有望为读者揭示数组...

    C/C++语言经典讲解例子

    ### C/C++语言中调用汇编语言的方法与实现 #### 一、引言 随着计算机技术的发展,C/C++语言因其高效性、灵活性及良好的跨平台能力,在软件开发领域得到了广泛的应用。与此同时,汇编语言作为一种底层语言,能够...

    c/c++完全打包应有尽有

    "内存与指针"是C++中的核心概念,这个文档会深入讨论指针的使用,包括动态内存分配、指针运算、指针与数组、指针与函数的关系,以及内存管理的最佳实践。 "effect c"可能是指C++中的特效或技巧,可能包含C++11及...

    c/c++指针总结··让你不再害怕指针

    通过以上讲解,我们可以看出,虽然C/C++中的指针类型可能看起来非常复杂,但只要掌握了基本的解析规则,就能够轻松地理解各种类型的含义。实际上,大多数情况下我们并不需要处理如此复杂的类型,但在需要时能够正确...

    10分钟通晓指针,史上最全的指针讲解

    阅读《10分钟通晓指针,史上最全的指针讲解》这篇PDF文档,你可以深入理解指针的用法,包括指针的概念、操作、类型和高级应用。文档详尽的内容将助你从初学者进阶到熟练掌握指针的编程者。无论你是自学还是在学习...

    C/C++精品打包(5个)

    在给定的“C/C++精品打包”压缩文件中,包含了五个非常有价值的资源,它们分别是:《CC++程序员应聘常见面试题.doc》、《C语言学习和精华文摘.chm》、《指针.ppt》、《turbo c 2.0 函数中文说明大全.txt》以及《编程...

    C++指针资料 集合!!

    这份"**C++指针资料集合**"显然是一个宝贵的资源,包含了关于C++指针的多种学习材料,旨在帮助程序员深入理解和熟练运用指针。 C++中的指针本质上是一个变量,它存储的是另一个变量的内存地址。理解指针的三大关键...

    c/c++语言参考手册

    4. **数组与指针**:这是C/C++的关键特性,涉及数组的声明、初始化和操作,以及指针的使用,包括指针的算术运算和解引用。 5. **字符串**:讲解字符串常量、字符数组、字符串函数(如strcpy、strlen、strcmp等)的...

    C/C++中二维指针的应用测试程序

    通过理解和熟练掌握这些知识点,你可以有效地在C/C++中使用二维指针来创建和管理动态的多维数据结构,这对于实现某些高级算法和数据结构,如图像处理、矩阵运算等场景非常有用。在实际编程中,还需要结合良好的编程...

    嵌入式C/C++语言精华文章集锦

    - **名称修饰(Name Mangling)的影响**:深入讨论了C++中的名称修饰机制如何影响函数和变量的链接,并解释了`extern "C"`是如何避免这个问题的。 - **跨语言调用**:详细说明了`extern "C"`如何使C++代码能够轻松地...

    C/C++程序设计课件

    本课件是针对《C/C++程序设计教程》一书的配套教学资源,由同济大学的专业教师团队精心制作,旨在帮助学生深入理解和掌握C/C++编程的核心概念和技术。 1. **C语言基础** - 变量与数据类型:了解基本的数据类型如...

    C/C++/C#笔试题目

    下面将详细介绍C、C++和C#的相关知识点,并结合笔试题目中的常见类型进行讲解。 C语言是计算机科学的基础,它简洁、高效,常用于系统编程和嵌入式系统。C语言的知识点包括: 1. 基本语法:变量声明、数据类型...

Global site tag (gtag.js) - Google Analytics