js十进制转二进制根据索引取值(前面自动补零,反转字符串从右边作为起点开始数)

场景

军工编码,根据某值的二进制数列,取某位数字作为指示灯开关指令

实现

function copeBinary(num, n){
const str = num.toString(2).padStart(16,‘0’);
const value = str.split(‘’).reverse().join(‘’).charAt(n);
const result = Number(value);
return result
}

比如传参一个23, 0,会解析为以下数列

0000000000010111

取右侧第一位数字作为返回值,得到结果

1

### 无符号与有符号的区别及应用场景 在计算机中,无符号和有符号是两种常见的整表示形式。它们的主要区别在于值范围、编码方式以及应用场景。 #### 1. 值范围 - **无符号**:无符号仅用于表示非负整,其取值范围是从0到\(2^n - 1\),其中\(n\)是位[^1]。例如,一个8位无符号取值范围为0到255。 - **有符号**:有符号可以表示正、负和零。通常采用补码表示法,其取值范围是从\(-2^{n-1}\)到\(2^{n-1} - 1\)。例如,一个8位有符号取值范围为-128到127[^2]。 #### 2. 编码方式 - **无符号**:无符号直接使用二进制编码表示值,每一位都对应一个权值。例如,二进制`00000101`表示十进制中的5。 - **有符号**:有符号通常采用补码表示法。正的补码与其原码相同;负的补码是保留符号位为1,然后对原码的值位取反并加1[^2]。例如,二进制`11111111`表示-1(8位有符号)。 #### 3. 换与操作 - 在C语言中,无符号和有符号之间的换可能会导致意外的结果,因为底层实现遵循B2U、B2T、T2U、U2T等规则。例如,当一个负被强制换为无符号时,其值会根据模运算规则重新计算。 - 扩大和截断操作也会有所不同。例如,将一个8位有符号扩展为16位时,需要进行符号扩展(即复制最高位以保持符号不变)。而无符号则只需在高位补零[^3]。 #### 4. 应用场景 - **无符号**:适用于只需要非负整的场景,如索引、计器、文件大小等。由于其值范围更大,因此在某些情况下比有符号更高效[^1]。 - **有符号**:适用于需要表示正负的场景,如温度、海拔高度、财务据等。在涉及学运算或需要区分正负的情况下,有符号更为合适。 ```python # 示例代码:无符号与有符号换 def unsigned_to_signed(unsigned_value, bit_width): if unsigned_value >= 2**(bit_width - 1): return unsigned_value - 2**bit_width return unsigned_value def signed_to_unsigned(signed_value, bit_width): if signed_value < 0: return signed_value + 2**bit_width return signed_value # 测试 unsigned_value = 255 # 8位无符号 signed_value = unsigned_to_signed(unsigned_value, 8) print(f"Unsigned to Signed: {unsigned_value} -> {signed_value}") # 输出 -1 signed_value = -1 # 8位有符号 unsigned_value = signed_to_unsigned(signed_value, 8) print(f"Signed to Unsigned: {signed_value} -> {unsigned_value}") # 输出 255 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值