我是靠谱客的博主 要减肥向日葵,最近开发中收集的这篇文章主要介绍C语言中的左移位和右移位,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

移位操作只是简单地把一个值的位向左或右进行移动。

1. 左移位

符号:<<

在左移位中,之最左边的几位被丢弃,右边多出来的几个空位则由0进行补齐。

例如:01101101 << 3

结果:01101000

2. 右移位

符号:>>

逻辑移位:左边移入的位用0填充

算术移位:左边移入的位由原先该值的符号位决定,符号位为1则移入的位均为1,符号位为0则移入的位均为0,这样能够保持原数的正
负形式不变。

例如:10010110 >> 2

逻辑移位:00100101

算术移位:11100101

左操作数的值将移动由右操作数指定的位数。两个操作数都必须是整型类型。

标准规定无符号值执行的所有移位操作都是逻辑移位。但对于有符号值,到底是采用逻辑移位还是算术移位则取决于编译器。

警告:

注意类似这种形式的移位:

a<<-5

左移-5位表示什么?是表示右移5位吗?还是根本不移位?在某台机器上,这个表达式实际执行左移27位的操作。

标准规定这类移位的行为是未定义的,所以它是由编译器决定的。然而,很少有编译器设计者会清楚地说明如果发生这种情况将会怎样,所以它的结果很可能没有什么意义。因此,应该避免使用这种类型的移位,因为它们的效果是不可预测的,使用这类移位的程序是不可移植的。

如果是十进制数进行移位,会先变换成二进制数进行移位,然后及那个结果在转换为十进制数。

例如:10 << 2

10的二进制数为:1010

结果:40(101000)

左移位和右移位的应用:
计数一个值中值为1的位的个数

int count_one_bits( unsigned value)
{
    int ones;
    
    for(ones = 0; value != 0; value = value >> 1)
        if( value % 2 != 0 )
            ones += 1;
    
    return ones;
}

最后

以上就是要减肥向日葵为你收集整理的C语言中的左移位和右移位的全部内容,希望文章能够帮你解决C语言中的左移位和右移位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部