如何用位操作将32位整数转为32位二进制字符串并存入指定缓存?
32位整数转二进制字符串实现思路(兼容有/无符号)
- 兼容有/无符号的类型处理:把输入的
int参数I强制转为unsigned int类型。不管输入是有符号还是无符号整数,转成无符号后都会按原始位模式处理,彻底避免有符号数移位时的符号扩展问题,确保最高位(包括有符号数的符号位)能被正确读取。 - 32位循环遍历:初始化索引变量
idx = 0,通过idx++控制循环32次,依次处理从最高位到最低位的每一位。 - 位操作提取最高位:对无符号整数执行
val >> 31操作,直接取出当前最高位(结果只能是0或1);之后执行val << 1左移一位,让下一位成为新的最高位,为下一次循环准备。 - 位值转字符:用三元运算符
bit ? '1' : '0'将提取的位值(0或1)转为对应ASCII字符,存入str的当前索引位置。全程仅使用允许的++操作和位操作,未用到其他算术运算。 - 字符串收尾:循环结束后,在
str[32]处赋值'\0',保证生成的是合法的C字符串。
内容的提问来源于stack exchange,提问作者Nateclsu
相关产品推荐
相关产品推荐

