<<(左移)、>>(带符号右移)和>>>(无符号右移)

<<(左移)、>>(带符号右移)和>>>(无符号右移)

>>>(无符号右移)
按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
其他结构和>>相似。
     /**
     * 输出一个int的二进制数
     * @param num
     */
    private static void printInfo(int num){
        System.out.println(num);
        System.out.println(Integer.toBinaryString(num));
    }

测试用例


        //原始数二进制
        printInfo(4);
        printInfo(4<<1);//4向左移动一位
        printInfo(4<<2);
//        4
//        100
//        8
//        1000
//        16
//        10000


        printInfo(4);
        printInfo(4>>1);//4向右移动一位
        printInfo(4>>2);

//        4
//        100
//        2
//        10
//        1
//        1
        printInfo(5);
        printInfo(5>>1);
        printInfo(5>>2);

//        5
//        101
//        2
//        10
//        1
//        1

 

### C语言中的左移右移运算符 #### 左移运算符 `<<` 左移运算符用于将操作数的二进制表示向左移动指定数量的位置。每次左移相当于乘以2。 - **语法**: `result = value << n;` 这里,`value` 是要被移位的操作数,而 `n` 表示要移多少位。 - **效果**: 将 `value` 的每一位都向左移动 `n` 位,在低位补上0。 例如: ```c #include <stdio.h> int main() { unsigned int num = 1; printf("%u << 3 is %u\n", num, (num << 3)); // 输出 "1 << 3 is 8" } ``` 在这个例子中,数字1(即二进制下的`0001`)经过三次左移变成了8(即二进制下的`1000`)。这实际上就是把原来的数值乘上了\(2^3\)的结果[^1]。 #### 右移运算符 `>>` 右移运算符则是将操作数按其二进制形式向右移动一定量的位置。对于有符号整型来说,高位会填充符号位;而对于无符号整型,则会在左边填入0。 - **语法**: `result = value >> n;` - **效果**: 把 `value` 向右移动 `n` 位,并根据类型决定如何处理新产生的最高有效位。 实例展示如下: ```c #include <stdio.h> int main(){ signed int neg_num = -5; unsigned int pos_num = 5; printf("-5 >> 2 equals %d\n", neg_num >> 2); // 对于负数,结果取决于编译器实现 printf("5U >> 2 equals %u\n", pos_num >> 2); // 结果为1,因为是逻辑右移 return 0; } ``` 这段代码展示了两个不同的情况:一个是带有符号的变量 `-5` 被右移两位得到的是平台依赖性的值(通常情况下应该是-2),另一个是没有符号的正整数 `5` 经过两次右移后变为1。值得注意的是,对于带符号类型的右移行为可能因具体硬件架构的不同而有所差异[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值