位运算——Java语言描述
【摘要】 如何打印一个二进制数? public static void print(int num) { for (int i = 31; i >= 0; i--) { System.out.print((num & (1 << i)) == 0 ? "0" : "1"); } System.out.println();}int 32位 0~2^31-1,真正表示的范...
如何打印一个二进制数?
public static void print(int num) {
for (int i = 31; i >= 0; i--) {
System.out.print((num & (1 << i)) == 0 ? "0" : "1");
}
System.out.println();
}
int 32位 0~2^31-1,真正表示的范围实际上是从0~2^30
原因:int型既可以表示正数,也可以表示负数
符号位:如果符号位为0,一定是一个非负数,如果符号为1,那么代表你绝逼是一个负数
左移:乘2的操作
int num = 12121212;
print(num);
//左移 *2的效果
print(num << 1);
print(num << 2);
负数:在Java中的范围是 -2^31
int am = Integer.MIN_VALUE;
print(am);
那么怎么算的负数呢?
我们先来打印一个-1
print(-1);
发现全部都是1,首先符号位代表你这是一个负数,然后说明,负级把后面的全部状态都进行取反的操作,最后在加1,10000……1,-000000……1.就是-1
为什么要进行取反+1的操作,而不是直接存储?
正数,直接就用它裸的这个值进行计算
负数,使符号位能与有效值部分一起参加运算,从而简化运算规则。
右移:除以2的操作
在Java中有俩个右移操作一个是>>,另一个是>>>
int d = 1024;
print(d);
//右移除2,最左侧用符号位来补充
print(d >> 1);//带符号右移
int e = Integer.MIN_VALUE;
print(e >> 1);//带符号位右移,出现俩个1
print(e >>> 1);//不带符号位右移
//系统最小取反+1后还是它自己
print(am);
print((~am + 1));
值得注意的是系统最小取反+1还是它自己,当你要使用最小值的时候,也就是应该换用long类型的时候了
应用,(~a+1)就是a的相反数
int a = 5;
print(a);//5
print(~a+1);//-5
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)