首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用‘栈’的思想编写一个十进制转换二进制、八进制或十六进制的程序

    根据进制转换方法,如十进制向二进制转换,将转换的十进制整数除以二进制基数(2),得到余数和商,如果商不为0,该商继续做被除数,除以基数,得到余数和商,此过程一直进行,直到得到的商为0时停止,此时得到的所有余数逆序排列就是转换得到的二进制数。十进制转换其他进制(八、十六)方法和当前方法相同,故可以扩展得到十进制向二、八、十六进制转换的统一算法。由于十进制数转换其他进制数时符合栈的特点“先进后出”,即先得到的余数是低位,后得到的余数是高位,因此这里利用栈做工具,保存转换过程中得到的余数。这里的栈需要自己定义,可以定义顺序栈,也可以定义链栈。可以将栈的定义及其基本操作放在一个头文件中,如果哪个程序需要就可以包含该头文件,而不需要每次都重新编写栈的代码。

    01

    C 语言中负数移位运算讲解

    C 语言中负数移位运算讲解 “<<”、“>>”为移位运算符。 “<<”为左移位运算符,即数据字节中的每个二进制位同时 向左移位。如“x<<n”表示 x 中的每个二进制位同时向左移动 n 位。 “>>”为右移位运算 符,即数据字节中的每个二进制位同时向右移位。如“x>>n”表示 x 中的每个二进制位同时 向右移动 n 位。 下图演示了一个 2 字节变量左移 3 位的过程: 十进制数-555 的二进制表: 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 先转换成二进制补码表: 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 0 最左端位保持不变 补码加“1”后状态 再将补码加“1”: 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 下一步向左移 3 位: 1 1 1 0 1 1 1 0 1 0 1 0 1 0 0 0 左端“离开”3 位丢弃 右端“移入”3 位用“0”补齐 最左端一位保持不变 再转换成二进制补码表: 1 0 0 1 0 0 0 1 0 1 0 1 0 1 1 1 补码再加“1”: 到此步结束。 1 0 0 1 0 0 0 1 0 1 0 1 1 0 0 0 补码加“1”后状态 结果转换成十进制数为“- 4440”。 总结:负数左移时,任何情况下“移入”位将用“0”补齐。 “>>”右移位运算可分为两种情况:一种是移入“0”的叫逻辑右移;一种是移入“1”的叫 算术右移。 负数右移用到的是算术右移。 下图演示了一个 2 字节变量右移 3 位的过程: 十进制数-555 的二进制表: 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 先转换成二进制补码表: 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 0 最左端位保持不变 补码加“1”后状态 再将补码加“1”: 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 下一步向右移 3 位: 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 左端“移入”3 位用“1”补齐 右端“离开”3 位丢弃 最左端一位保持不变 再转换成二进制补码表: 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 补码再加“1”: 到此步结束。 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 补码加“1”后状态 结果转换成十进制数为“- 70”。 总结:负数右移时,任何情况下“移入”位将用“1”补齐。 注:二进制表最左端的二进制位表示符号位,“+”用“0”表示,“-”用“1”表示。

    03
    领券