如何在Dart中将十进制数转换为7位补零的二进制数?
问题:十进制转7位固定长度二进制缺失前置零
需要将十进制数转换为7位固定长度的二进制数,例如十进制数11对应的二进制应为0001011。现有一段Dart代码无法满足需求:
String dec2bin(int dec) { var bin = ''; while (dec > 0) { bin = (dec % 2 == 0 ? '0' : '1') + bin; dec ~/= 2; } return bin; }
这段代码返回的是1011,会自动去掉前置零,如何修改才能得到固定7位的二进制字符串?
解决方案
方法1:使用字符串填充补零
直接在原代码的返回环节,用padLeft方法将结果字符串填充至7位,不足的左侧补0:
String dec2bin(int dec) { var bin = ''; while (dec > 0) { bin = (dec % 2 == 0 ? '0' : '1') + bin; dec ~/= 2; } // 左侧补0,确保总长度为7位 return bin.padLeft(7, '0'); }
调用dec2bin(11)会返回0001011,完全符合需求。
方法2:直接生成7位二进制字符串
从最高位(26=64)到最低位(20=1)逐位计算,直接构建7位结果,避免后续补零操作:
String dec2bin7(int dec) { String bin = ''; // 遍历7位的每一位(从第6位到第0位) for (int i = 6; i >= 0; i--) { // 右移i位后与1按位与,得到当前位的0/1值 int bit = (dec >> i) & 1; bin += bit.toString(); } return bin; }
这种方式天生生成7位字符串,比如dec2bin7(0)返回0000000,dec2bin7(127)返回1111111,完全覆盖7位二进制的取值范围。
额外提示
7位二进制仅能表示0~127范围内的十进制数,若输入数值超出该范围:
- 方法1会返回完整的二进制字符串(长度超过7位),此时可添加
dec = dec % 128来截断至7位有效范围; - 方法2会自动取数值的低7位结果,等同于
dec % 128的效果。
内容的提问来源于stack exchange,提问作者Tanjim ahmed
相关产品推荐
相关产品推荐

