我对C编程很新,我遇到了掩码.有人可以向我解释位屏蔽的一般概念和功能吗?非常感谢例子.
我只是想知道为什么在类的hashCode()方法中使用素数?例如,当使用Eclipse生成我的hashCode()方法时,总会使用素数31:
public int hashCode() {
final int prime = 31;
//...
}
Run Code Online (Sandbox Code Playgroud)
参考文献:
这是关于Hashcode的一篇很好的入门文章和关于我如何找到哈希工作的文章(C#但概念是可转移的): Eric Lippert的GetHashCode指南和规则()
我试图了解班次运营商,并没有得到太多.当我尝试执行以下代码时
System.out.println(Integer.toBinaryString(2 << 11));
System.out.println(Integer.toBinaryString(2 << 22));
System.out.println(Integer.toBinaryString(2 << 33));
System.out.println(Integer.toBinaryString(2 << 44));
System.out.println(Integer.toBinaryString(2 << 55));
Run Code Online (Sandbox Code Playgroud)
我得到以下内容
1000000000000
100000000000000000000000
100
10000000000000
1000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
我看到了一个我以前从未见过的循环:
for (int i = 0; i < (1 << list.Count); i++)
Run Code Online (Sandbox Code Playgroud)
我无法理解是什么(1 << list.Count)意思,也许有人可以解释我这个?
我不想优化任何东西,我发誓,我只想出于好奇而问这个问题.我知道,在大多数硬件有位移(例如的组件的命令shl,shr),它是一个命令.但是,你转移了多少比特(纳秒级,或CPU技巧)是否重要?换句话说,在任何CPU上是否更快?
x << 1;
Run Code Online (Sandbox Code Playgroud)
和
x << 10;
Run Code Online (Sandbox Code Playgroud)
请不要因为这个问题而恨我.:)
我已经看过运算符>>和我看过的<<各种代码(我实际上并没有理解),但我只是想知道它们实际上做了什么以及它们的实际用途是什么.
编辑
如果移位是喜欢x * 2和x / 2,就是从实际使用的真正的区别*和/运营商?有性能差异吗?
我注意到我可以做一些事情,比如2 << 5获得64并1000 >> 2获得250.
我还可以用>>在print:
print >>obj, "Hello world"
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我正在考虑为"管理"Web应用程序设计权限系统的最佳方法.该应用程序可能有许多用户,每个用户都可以被分配一定的角色; 可以允许其中一些用户执行角色之外的特定任务.
我可以想到两种设计方法:一种是"权限"表,每个用户都有一行,布尔列,每个任务一个,为他们分配执行这些任务的权限.像这样:
User ID Manage Users Manage Products Manage Promotions Manage Orders 1 true true true true 2 false true true true 3 false false false true
我想到的另一种方法是使用位掩码来存储这些用户权限.对于32位有符号整数,这会将可管理的任务数限制为31,但实际上我们不可能有超过31个用户可以执行的特定任务.这样,数据库模式就会更简单,每次添加需要访问控制的新任务时,我们都不必更改表结构.像这样:
User ID Permissions (8-bit mask), would be ints in table 1 00001111 2 00000111 3 00000001
人们通常使用什么机制,为什么?
谢谢!