左移 运算 pre 是把 data- 类型 位操作 个数
去华为面试的时候。没有做好准备工作。面试的流程没有问清也没有查,结果一过去就让上机做题,着实有点措手不及。笔者是擅长前端的 Java webproject 师啊,主要的底层编程知识早已生疏了。机试题碰到了这道位运算的题目,按理说是非常 easy 的,原理笔者也非常清楚。可是因为实在是好多年没有搞过位运算了,Java 位运算更是没有操作过。所以结果实在是不体面……
机试时间规定是一个小时。语言可选 C 或 Java 还有个什么脚本语言,笔者花了将近三个小时。才用 Java 勉强把题做出来了。羞愧羞愧…… 回来就用 JS 又一次实现了一个简单版本号。今天整理贴出来。
题目是:循环输入每组两个数 hex 和 n(0<=n<31),hex 是一个 16 进制的数字,我们要做的是将 hex 的第 n 位取反。然后以 16 进制的形式输出相应的结果。
笔者折腾两个多小时的过程就不再赘述了,这里给出 js 的实现。非常 easy 的位操作基础知识。原理啰嗦一句。就是把 1 按比特位左移 n 位,然后跟原数异或即可了:
因为 js 整数类型仅仅有 32 位的限制,上述演示样例代码仅支持 n<31 的简单情况(第 31 位是符号位)。
- function bitOper(hex, n) {
- var num = parseInt(hex);
- num ^= (1 << n);
- return num.toString(16);
- }
- console.log(bitOper(0x1234, 3)); //123c
特定位取反(js 实现)
来源: http://www.bubuko.com/infodetail-2151858.html