正直面容猥琐心 发表于 2020-5-4 15:09:54

这个过程是什么 求大佬写出来

大肥侃子 发表于 2020-5-4 18:25:26

本帖最后由 大肥侃子 于 2020-5-4 18:28 编辑

授人以渔:你可以去看看怎么用编译器的debugger,都有教程的。

按位逻辑运算符和移位运算符
0、各种声明略
1、输入八进制数 a (157653) 和整数 n (3)
2、b = a << (16-n),b = a 左移 (16-n)位,也就是 a 乘以 2 的 13 次幂,但 unsigned short 只有 16 位,,从右边开始数位数,也就是让第一位到第 (16-n)位的数都归 0 ,而倒数的 n 个位保持为原数第一位到第 n 位对应的位数,而这题刚好 n = 3 ,八进制的一位对应二进制的三位,也就是保持八进制数的第一位数 3 ,得到 b 的二进制数就是 0 110 000 000 000 000
3、c = a >> n,c = a 右移 n 位,n = 3,八进制的第一位去掉,剩下的右移,左边的三位归零,c 的二进制数就是 0 001 101 111 110 101
4、c = b | c,c = 对 b 和 c 按位或,也就是(0 110 000 000 000 000)|(0 001 101 111 110 101),得到(0 111 101 111 110 101),转换成八进制数就是(0 7 5 7 6 5)
其实可以直接写成一个函数,但是涉及比较复杂的数学,就到这里。

Richard149 发表于 2020-5-4 22:01:27

a=157653 转为2进制为:1101 1111 1010 1011
a <<13                     :0110 0000 0000 0000         也就是b的二进制
a>>3                        :0001 1011 1111 0101            也就是c的二进制
b|c                              :0111 1011 1111 0101      这个二进制转化为8进制就是:75 765啦,也就是最后的输出
页: [1]
查看完整版本: 这个过程是什么 求大佬写出来