当前位置: 首页 > 面试题库 >

Golang按位运算以及常规字节操作

苏宜人
2023-03-14
问题内容

我有一些对字节执行按位运算的C#代码。我正在golang尝试做同样的事情,但是遇到了困难。

C#中的示例

byte a, c;
byte[] data; 
int j;
c = data[j];
c = (byte)(c + j);
c ^= a;
c ^= 0xFF;
c += 0x48;

我读过golang无法对字节类型执行按位运算。因此,我是否必须将代码修改为uint8类型才能执行这些操作?如果是这样,是否有一种干净,正确/标准的方法来实现?


问题答案:

Go当然可以对byte类型进行按位运算,这只是的别名uint8。我必须对您的代码进行的唯一更改是:

  1. 变量声明的语法
  2. 在将其添加jbyte之前先转换为c,因为Go在进行算术时缺少(按设计)整数提升转换。
  3. 删除分号。

干得好

var a, c byte
var data []byte
var j int
c = data[j]
c = c + byte(j)
c ^= a
c ^= 0xFF
c += 0x48

如果您打算在Go中按位执行操作,请注意,该操作符为,而^不是~大多数其他当代编程语言中使用的。这与用于xor的运算符相同,但两者并不矛盾,因为编译器可以通过确定将^用作一元运算符还是二进制运算符来分辨出哪一个。



 类似资料:
  • 本文向大家介绍C#位运算以及实例计算详解,包括了C#位运算以及实例计算详解的使用技巧和注意事项,需要的朋友参考一下 前言: 平时在实际工作中很少用到这个,虽然都是一些比较基础的东西,但一旦遇到了,又不知所云。刚好最近接触了一些相关这方面的项目,所以也算是对 这些内容重新温习实践了一遍。所以这篇不仅作为个人备忘,也分享给各位重温一遍。 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内

  • 问题内容: 为什么按位操作打印-1?在二进制中,不为0应该为1。为什么呢? 问题答案: 你实际上很亲密。 在二进制中,不为0应该为1 是的,当我们谈论一点时,这是绝对正确的。 但是,其值为0实际上是全零的32位!将所有32个零转换为32个零。 这是的补码表示形式。 类似地: 也就是说,对于32位无符号二进制补码表示,。 进一步阅读: 补码 这是Java(以及其他系统)用来表示带符号的数字位的系统

  • 给定一个整数 Arr 数组和一个整数 K,将对每个具有整数 X 的元素 A[i] 执行按位 AND 让Final sum定义如下:i的所有值(0到array-1的长度)的总和(A[i]AND X) 返回受以下约束的整数 X: 最终总和应该是最大值 X在其二进制表示中应该将K位精确地包含为1 如果X的多个值满足上述条件,则返回可能的最小值X 12在其二进制中恰好包含2位,并且是为所有(A[i]AND

  • 问题内容: 我正在研究《 Beginning Android Games》 这本书。我注意到的一件事是: 这是我第一次看到这样的变量,所以我不知道它的作用。我在Java中运行代码并创建了一些示例。 如果我运行此代码: 答案将是0?这是为什么? 如果我运行此代码: 起初,我认为这是价值的串联,因此我假设i = 10500,但事实并非如此。答案是一样的。还是0?有人知道这里发生了什么吗? 问题答案:

  • 本文向大家介绍JavaScript 按位NOT运算符(〜),包括了JavaScript 按位NOT运算符(〜)的使用技巧和注意事项,需要的朋友参考一下 示例 按位NOT(~)对值中的每个位执行NOT操作。 语法: 返回值: 一个Number。 描述 NOT操作的真值表为: 一种 不是 0 1 1 0 按位不加数字会导致:-(x + 1)。 例子: 值(以10为底) 值(以2为底) 返回(以2为底)

  • 考虑以下代码: 我可以理解Python(和其他语言)中的算术运算符,但我从来没有很好地理解过“按位”运算符。在上面的示例中(来自Python书籍),我理解左移位,但不理解其他两个。 此外,位运算符实际用于什么?我想举一些例子。