1,左移运算如果处理负数的时候是咋样的呢???会不会通过左移将一个负数
变成正数???
2,左移右移的时候,它的位数有的限制吗???可以无限
大吗???
3,详解二进制中的1的个数
左移:
1,左移运算符m>> n表示把m左移n位。左移n位的时候,最左边的n位将
被丢弃,同时在最右边补上n个0
程序1:
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int a,c;
unsigned int b,d;
a= 5;
b= 5;
c= -5;
d= -5;
printf("a is :%d\n", a<<2);
printf("b is :%d\n", b<<2);
printf("\n c is :%d %d\n", c,c << 2);
printf("d is :%d %d\n", d , d <<2);
return 0;
}
运行结果:
可以看到:
1, int类型a= 5时,a左移两位后,变成了20
0000….. 0000 0101,左移两位后,变成了0000….. 0001 0100 (20)
2, unsignedint类型b= 5,b左移两位后,变成了20
0000….. 0000 0101,左移两位后,变成了0000….. 0001 0100 (20)
而这里,int和unsignedint的区别在于范围不一样:
int(32位):-2147483648~2147483647
unsignedint:0– 4294967295
3, int类型c= -5时,c左移两位后,变成了20
c的二进制表示为:1111….. 1111 1011,然后将其左移2位后,变
成了