我在JDK中看到Integer.MIN_VALUE是0x80000000。考虑到原始是0x80000000,那么相反的是0x8fffffff,最后补码是 0x8fffffff +( - 1)= -2 ^ 32 ?那么 -2 ^ 32 是否为1000 0000 0000 0000 0000 0000 0000 0000 in bit?
答案 0 :(得分:5)
使用32位,您可以表示2 ^ 32个整数。
如果你总结它们,你会得到2^31-1
。
因此,最大(最正)整数是-2^31
,最小(最负)整数是private void btnNext_Click(object sender, EventArgs e)
{
List<Branch> listBranchs = new List<Branch>();
//Adding Branch to listBranchs ...
listBranchs.ForEach(delegate(Branch branch)
{
branchInterf.insertBranch(branch,user);
BranchDAO bdao = new BranchDAO();
branch.intBranchID = bdao.getBranchID(); //here is the problem, why bdao.getBranchID() return 0 ?
});
}
。
答案 1 :(得分:1)
考虑一个简单的4位场景:
计算机将负整数存储为2的补码。为了获得2的补码,我们遵循以下程序:
表示否定8 =&gt;
1000(二进制正8)
0111(翻转所有位= 1&#39; s补码)
+ 1(加1)
1000(这是整数存储在计算机中的负8,MSB =符号位= 1表示-ve)
因此,2补码= 1补码+ 1 2补码的一个优点是它只有1表示0不同于1的补码(其中+ ve和-ve 0,即0000和1111分别称为0交叉问题)。 因此,这就是你在负面获得额外价值的原因所以最后得出4位情景:
计数:0到7是2 ^ 3-1 = 7 + ve
计数:-8到-1是2 ^ 3 = 8 -ve
计数:计数为0是1
计数总和=&gt; 1 + 7 + 8 = 16 = 2 ^ 4
因此对于你的问题:2 ^ 31是+ ve整数,2 ^ 31-1是-ve整数,还有1个值为0。
旁注:
从2的补码转换:1000-> 0111 + 1 = 1000(8)
值为8并放入-ve符号,即最终值为-8
从2的补码转换:1111-> 0000 + 1 = 0001(1)
值为1并放入-ve符号,即最终值为-1
答案 2 :(得分:0)
特定精度的整数是偶数,因为算术基于2的幂;因此你不能拥有与负数一样多的正整数,零会偷走一个位置。