位运算深度解析:左移、右移与memset应用
需积分: 21 153 浏览量
更新于2024-07-09
收藏 1.48MB PPTX 举报
"位运算.pptx"
这篇内容主要讲述了计算机科学中的位运算,包括位运算的原理、应用以及一些相关的编程实践。位运算是计算机底层操作的基础,它涉及到数据在计算机内部的二进制表示。
首先,内容提到了正数和负数在计算机中的存储方式。对于正数,原码、反码和补码是相同的,都是其二进制表示。而对于负数,原码是其二进制表示,反码是除了符号位(最高位)之外的所有位取反,补码是在反码的基础上再加1。例如,-1的原码是[10000001],反码是[11111110],补码是[11111111]。
接着,介绍了`sizeof()`运算符,它用于获取变量或数据类型的字节数。例如,`short`类型占2字节,`int`占4字节,`long long`占8字节,`double`占8字节,`char`占1字节,字符串`s`的大小为8字节(指针大小),动态数组`int v[n]`的大小为4*n字节。
然后,讲解了`memset`函数,该函数用于将内存区域的每个字节设置为特定的值。`memset(s, NUM, n)`会将指针`s`指向的前n个字节设置为数值NUM。例如,将一个`int`类型的变量`a`用`memset(a, 1, 4)`填充后,`a`在16进制下表示为01010101,对应的十进制值为16843009。
位运算中,左移`<<`表示将数字的二进制位向左移动,高位补0;右移`>>`分为逻辑右移和算术右移,这里提到的是算术右移,它保留符号位,高位用符号位填充,低位舍弃。例如,`n<<1`相当于`n*2`,`n>>1`相当于`n/2`(整除)。
快速幂算法`ksm`被提及,这是一种在计算`a^b mod p`时提高效率的方法,其时间复杂度为O(log b)。给出的代码实现中,通过不断地将指数b进行拆分并利用幂的性质进行计算,大大减少了计算次数。
最后,内容提到了一个长整型乘法的问题,即`a * b mod p`。如果直接相乘可能会导致越界,因此可以采用类似快速幂的方法,将乘法转化为加法,即`a * b = (a * 2) * (b / 2) + a * (b % 2)`,但这种方法的时间复杂度会变为O(log b)。
总结起来,这篇内容涵盖了位运算的基本概念、C/C++中的`sizeof`运算符、`memset`函数的使用,以及快速幂算法在计算模幂和长整型乘法中的应用。这些知识对于理解计算机底层运作和编写高效的算法至关重要。
2021-10-06 上传
2021-10-06 上传
2023-07-29 上传
2021-10-07 上传
2021-10-04 上传
2021-10-11 上传
2021-10-06 上传
2021-10-11 上传
2021-10-06 上传
wallyIII
- 粉丝: 5
- 资源: 40
最新资源
- xdPixelEngine-2
- filter-records:原型制作-DOM中的记录过滤和排序
- 管理系统系列--中医处方管理系统.zip
- LED广告屏控制与显示解决方案(原理图、程序及APK等)-电路方案
- scenic-route:多伦多开放数据绿色路线图应用
- spring-google-openidconnect
- 漏斗面板
- bing-wallpaper
- friendsroom
- 基于M058S的8x8x8 LED 光立方设计(原理图、PCB源文件、程序源码等)-电路方案
- 管理系统系列--综合管理系统.zip
- wisit-slackbot:Slackbot获取有关wisit的信息
- 电子功用-场效应管电容-电压特性测试电路的串联电阻测定方法
- Java-Google-Finance-Api:用于 Google Finance 的 Java API - 使用 Quandl 构建
- test
- 管理系统系列--整合 vue,element,echarts,video,bootstrap(AdminLTE),a.zip