integer.tobinarystring() 返回无符号整数的最简二进制字符串,不补前导零、不加"0b"前缀;负数如-1输出32个1,0输出"0",正数如8输出"1000";需固定位宽时须手动补零。

Integer.toBinaryString() 返回的是无符号正数形式
Java 的 Integer.toBinaryString() 不会补前导零,也不表示符号位;它把输入当作**无符号整数处理**,直接输出对应二进制值的最简字符串(去掉高位所有 0)。比如 Integer.toBinaryString(-1) 返回的是 "11111111111111111111111111111111" —— 因为 -1 在 int 中的补码就是 32 个 1,而这个方法原样输出这 32 位的二进制表示,不加任何修饰。
常见误解是以为它像 Python 的 bin() 那样带 "0b" 前缀,或者会自动按字节对齐。它不会。你得到的就是纯数字字符序列。
- 负数输入 → 输出 32 位全 1 形式(如 -1 → 32 个 1)
- 0 输入 → 返回
"0",不是空字符串或"00000000" - 正数输入 → 去掉高位 0,例如
Integer.toBinaryString(8)返回"1000",不是"00000000000000000000000000001000"
需要固定位宽(如 8/16/32 位)时得自己补零
如果你在做协议解析、位操作调试或和硬件交互,往往需要固定长度的二进制字符串(比如 always 8-bit)。Integer.toBinaryString() 不提供 padding 功能,必须手动处理。
最稳妥的做法是用 String.format() 或 String.format("%32s", ...).replace(' ', '0'),但要注意:要先确保数值在目标位宽范围内,否则高位会被截断或溢出。
第一步】:将安装包中所有的文件夹和文件用ftp工具以二进制方式上传至服务器空间;(如果您不知如何设置ftp工具的二进制方式,可以查看:(http://www.shopex.cn/support/qa/setup.help.717.html)【第二步】:在浏览器中输入 http://您的商店域名/install 进行安装界面进行安装即可。【第二步】:登录后台,工具箱里恢复数据管理后台是url/sho
立即学习“Java免费学习笔记(深入)”;
- 补 8 位:
String.format("%8s", Integer.toBinaryString(n)).replace(' ', '0') - 补 32 位(安全兜底):
String.format("%32s", Integer.toBinaryString(n & 0xFFFFFFFFL)).replace(' ', '0')(& 0xFFFFFFFFL是关键,把负数转成等效无符号 long,避免符号扩展干扰) - 别用
Integer.toBinaryString(n).length() 这类拼接,容易越界或逻辑错
注意参数类型和边界行为
Integer.toBinaryString() 只接受 int,传入 long、byte 或 short 会触发隐式转换,可能带来意料外的结果。
- 传
byte b = -1→ 自动提升为int,结果仍是 32 个 1,不是 8 个 1 - 想看 byte 的 8 位表示?得先掩码:
Integer.toBinaryString(b & 0xFF) - 传
long会编译报错;要用Long.toBinaryString(),但它同样不补零、不处理符号位 -
Integer.toBinaryString(Integer.MIN_VALUE)返回"10000000000000000000000000000000"(32 位),这是正确的补码最高位为 1 的表现
替代方案:用 BitSet 或手动位移更可控
如果频繁做位级分析(比如检查某一位是否为 1、统计置位数、构造掩码),Integer.toBinaryString() 只是辅助查看手段,真正干活建议用 BitSet 或循环位移。
- 查第 i 位(从右往左,0 起始):
((n >> i) & 1) == 1 - 统计 1 的个数:
Integer.bitCount(n)比转字符串再 count 快得多 - 构造特定掩码:
1 比拼字符串可靠 -
BitSet.valueOf(new long[]{n})可以可视化、可修改、支持范围操作,适合复杂位逻辑
字符串化只是“看”,不是“算”。一旦开始写条件判断或位运算,就该离开 toBinaryString 了。









