贵州城乡住房建设部网站现货交易平台排名
- 作者: 五速梦信息网
- 时间: 2026年04月20日 11:02
当前位置: 首页 > news >正文
贵州城乡住房建设部网站,现货交易平台排名,镇江网站建设设计,wordpress建站最低配置1、双目运算符 位移位运算符是将数据看成二进制数#xff0c;对其进行向左或向右移动若干位的运算。 位移位运算符分为左移和右移两种#xff0c;均为双目运算符。 例如#xff1a; 8 3 #xff08;意思是8向右移动3位#xff09;第一运算对象是移位对象对其进行向左或向右移动若干位的运算。 位移位运算符分为左移和右移两种均为双目运算符。 例如 8 3 意思是8向右移动3位第一运算对象是移位对象第二个运算对象是所移的二进制位数。 2、逻辑移位与算术移位 在嵌入式开发中移位操作是常用的一种运算。但是在进行移位运算的时候如果没有考虑到有符号和无符号的移位区别就很容易掉进陷阱得不到我们想要的结果。 我们可以看下面例子你们猜出结果么 signedchar i -125; i i 2; cout (int)i; return 0; 编译结果为-32 为什么有这样的结果首先介绍两个概念逻辑移位和算数移位。 逻辑移位简单理解就是物理上按位进行的左右移动两头用0进行补充不关心数值的符号问题。 算术移位同样也是物理上按位进行的左右移动两头用0进行补充但必须确保符号位不改变。 算术移位指令 算术移位指令有算术左移SAL(ShiftAlgebraic Left)和算术右移SAR(ShiftAlgebraic Right)。算术移位指令的功能描述如下 1算术左移SAL把目的操作数的低位向高位移空出的低位补0 2算术右移SAR把目的操作数的高位向低位移空出的高位用最高位(符号位)填补。 逻辑移位指令 此组指令有逻辑左移SHL(ShiftLogical Left)和逻辑右移SHR(ShiftLogical Right)。逻辑左移/右移指令只有它们的移位方向不同移位后空出的位都补0。 1 逻辑左移SHL 2 逻辑右移SHR 但我们好奇的是“i3”和“i3”到底采用的是算术还是逻辑移位呢 首先了解一下《计算机原理及基础 —— 有符号类型和无符号类型》 通过sizeof查看在计算机中用几字节存储的即8在计算机内是以0000 1000 形式还是以 0000 0000 0000 1000形式 其次了解一下 《原码、反码、补码之间的快速转换和简单运算》 查看有符号、无符号类型左移或者右移后的数值是多少 左移 1、当向左边移动3位采用的什么方式的移动 #include stdio.h int main() {unsigned int ui 8;ui ui 3;printf(ui %d 无符号类型左移正数\n, ui);printf(sizeof(unsigned int ) %d\n, sizeof(unsigned int));int i 8;i i 3;printf(i %d 有符号类型左移正数\n, i);printf(sizeof(int ) %d\n, sizeof(int));int fi -8;fi fi 3;printf(fi %d 有符号类型左移负数\n, fi);return 0; }结果显示 ui 64 无符号类型左移正数 sizeof(unsigned int ) 4 i 64 有符号类型左移正数 sizeof(int ) 4 fi -64 有符号类型左移负数 分析 移位对象 移位对象的二进制表示 4字节 32位所移的二进制位数移位后的二进制 移位后的10进制移位对象类型移动方向移位方式80…0 0000 100030…0 0010 000064unsigned int左移逻辑左移80…0 0000 100030…0 0010 000064int左移逻辑左移-81…1 1111 100031…1 1100 0000-64int左移 逻辑左移 结论不管是否有无符号类型也不管值的正负均采用的是逻辑左移。 右移 1、当向右边移动3位采用的什么方式的移动 #include stdio.h int main() {unsigned int ui 8;ui ui 3;printf(ui %d 无符号类型右移正数\n, ui);printf(sizeof(unsigned int ) %d\n, sizeof(unsigned int));int i 8;i i 3;printf(i %d 有符号类型右移正数\n, i);printf(sizeof(int ) %d\n, sizeof(int));int fi -8;fi fi 3;printf(fi %d 有符号类型右移负数\n, fi);return 0; }结果显示 ui 1 无符号类型右移正数 sizeof(unsigned int ) 4 i 1 有符号类型右移正数 sizeof(int ) 4 fi -1 有符号类型右移负数 分析 移位对象 移位对象的二进制表示 4字节 32位所移的二进制位数移位后的二进制 移位后的10进制移位对象类型移动方向移位方式80…0 0000 100030…0 0000 00011unsigned int右移逻辑右移80…0 0000 100030…0 0000 00011int右移算术右移-81…1 1111 100031…1 1111 1111-1int右移 算术右移 结论说明只要是有符号数不管值是正还是负右移时采用的都是算术右移。 再加一个实例 (1)unsigned char x3; x1是多少x1是多少 (2)char x3; x1是多少x1是多少 (3)char x-3; x1是多少x1是多少 3写成二进制数是00000011-3写成二进制数是(补码)11111101。 程序执行的时候操作的是数值的编码表示也就是数值在内存中的二进制表示。比如说程序取-3的时候就去取11111101。 (1)对无符号数3来说x1往左移一位最左边的位移掉了最右边的移进来的位补零。变成00000110所以结果是6x1往右边移一位由于是无符号数所以逻辑右移最右边一位移掉最左边移进来的位补零变成00000001所以结果是1。 (2)对于有符号数3来说x1往左移一位最左边的位移掉了最右边的移进来的位补零。变成00000110所以结果是6x1往右边移一位由于是有符号数可能发生逻辑右移也可能发生算术右移这一点C标准并没有明确地指定是使用逻辑右移还是算术右移。但大多数的机器都使用算术右移变成00000001所以结果还是1。但是请注意这只是说大多数的机器是这样的你敢保证自己不会碰到特殊情况吗 (3)对于有符号数-3来说x1往左移一位最左边的位移掉了最右边的移进来的位补零。变成11111010结果是-6。往右移一位由于是有符号数可能发生逻辑右移也可能发生算术右移。大多数机器使用算术右移变成11111110结果是-2。 总结左移时总是移位和补零。右移时无符号数是移位和补零此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位也就是补最高有效位移几位就补几位,此时称为算术右移。 综上所述: 左移时总是移位和补零,无论是有符号类型数据还是无符号类型数据都统称为逻辑左移。 右移时无符号数是移位和补零此时称为逻辑右移; 右移时而有符号数大多数情况下是移位和补最左边的位也就是补最高有效位移几位就补几位,此时称为算术右移。 参考连接 1、https://blog.csdn.net/jiangjieqazwsx/article/details/79942154 2、https://blog.csdn.net/u013162035/article/details/78620803 3、https://blog.csdn.net/u012745229/article/details/51405332 4、https://www.baidu.com/link?urlgJVDtsgyNg83SN6nnAm5IAYLo-l9zh7T8UpVtVsngbRbqJw2GD3hYrv6OwES54FEZCDnlOhTP4z0Z6HmoOzSjX2fz8hxf9D5qYuFWibM_r_V3k39HksK5mpnFWHvosSt8EvtW9Gui5AEz-m0as7fFKwdeqidfa49686500000f6f000000025c2c6923
- 上一篇: 贵州城乡和住房建设厅网站最好的dm单网站建设
- 下一篇: 贵州公司网站建设广东品牌网站建设968
相关文章
-
贵州城乡和住房建设厅网站最好的dm单网站建设
贵州城乡和住房建设厅网站最好的dm单网站建设
- 技术栈
- 2026年04月20日
-
贵阳做企业网站网站短信通知
贵阳做企业网站网站短信通知
- 技术栈
- 2026年04月20日
-
贵阳专业建网站中铁四局建筑公司网站
贵阳专业建网站中铁四局建筑公司网站
- 技术栈
- 2026年04月20日
-
贵州公司网站建设广东品牌网站建设968
贵州公司网站建设广东品牌网站建设968
- 技术栈
- 2026年04月20日
-
贵州公司网站开发网站设计标语
贵州公司网站开发网站设计标语
- 技术栈
- 2026年04月20日
-
贵州建设局网站甘肃网站建设哪家好
贵州建设局网站甘肃网站建设哪家好
- 技术栈
- 2026年04月20日
