Go语言中文网 为您找到相关结果 21

go语言中int和byte转换

主机字节序 主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性;例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱 参考;一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序 —> 网络字节序 -> 主机字节序 大端小端区别 大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 低地址 --------------------> 高地址 高位字节 地位字节 小端模式:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端 低地址 --------------------> 高地址 低位字节 高位字节 什么是高位字...阅读全文

博文 2018-11-11 12:34:39 wuzhc

golang的位运算操作符的使用

& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移 感觉位运算操作符虽然在平时用得并不多,但是在涉及到底层性能优化或者使用某些trick的时候还是比较有意思。 &(AND) |(OR) 就不提了最常用的东西 会编程就会。 &操作的话是当 两个数需要同时为1的时候才会保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4 | 操作的话是当 两个数同时为1或者1个为1一个不为1的时候会保留。 例如 0000 0100 | 0000 1111 => 0000 1111 => 15 ^(XOR) 在go语言中XOR是作为二元运算符存在的: 但是如果是作为一元运算符出现,他的意思是按位取反,例如 pa...阅读全文

博文 2017-01-07 08:00:02 henrylee2cn

Go中的bit位和位运算符

一.二进制长什么样 bit比特是计算机的最小单元,是一个二进制位1或者0 t.Log("start") t.Logf("%b", 0) //0 t.Logf("%b", 1) //1 t.Logf("%b", 2) //10 t.Logf("%b", 3) //11 /* int是带符号的,表示范围是:-2147483648到2147483648,即-2^31到2^31次方。 uint则是不带符号的,表示范围是:2^32即0到4294967295。 */ var one uint one = 10000 t.Logf("%b", one) //10011100010000 13位,uint最多是32位 二.运算符 主要有下面几种运算符 & 位运算 AND | 位运算 OR ^ 位运算 XOR...阅读全文

通过leetcode学习位运算及其Go实现

问题描述 461. Hamming Distance即求两个正整数的二进制对应位数不同的个数 原理说明 从问题描述来看,最直观的解决方法就是十进制数先转成二进制,再比对相同位数是否相同,不同则计数器累加,最终计数器的值即是Hamming Distance。 优化方案:先^运算,对运算结果的位数进行遍历,1则计数器累计 基于这个思想,需要用到的有 异或运算 和 位运算。 异或^ 和 异或非 异或运算法则:相同为零,不同为一。异或非运算法则:相同为一,不同为零。即: 输入A: 1 0 1 0 输入B: 1 1 0 0 异或运算结果: 0 1 1 0 异或非(同或)运算结果:1 0 0 1 左移<< 和 右移>> 左移 右边空出的位用0填补 高位左移溢出则舍弃该高位 右移 左边空出的位用0或者1填...阅读全文

博文 2017-10-29 06:04:40 酒肉穿肠过

请问go标准库里面有没有对一个uint32某几个bit更改或者移位的package?

最近要做一个小工具,对uint32的整数进行逻辑位操作,想请教大家一下,想实现下面的功能,有没有标准库的支持,省得自己再开发了。 (1)对某连续的几个bit进行赋值; (2)循环左移或者右移; (3)左移低位补零,或者右移高位补零。 麻烦各位专家指点一下! 谢谢...阅读全文

golang插入排序算法

插入排序算法原理:顺序从序列中取一个数与左侧的元素们做比较,如果左侧的元素比取的数大,就向右移,直到把取的数插入到不小于左侧元素的位置处。类似于扑克牌的点数排序。 package main import "fmt" func main() { numbers := []int{6, 2, 7, 3, 8, 5} InsertSort(numbers) fmt.Println(numbers) } func InsertSort(values []int) { length := len(values) if length <= 1 { return } for i := 1; i < length; i++ { tmp := values[i] // 从第二个数开始,从左向右依次取数 key...阅读全文

博文 2018-07-02 21:35:45 ustb80

(转)二进制相关基础

载:https://mp.weixin.qq.com/s?__biz=MzU2NjIzNDk5NQ==&mid=2247483797&idx=1&sn=18579f6a4e319b6adefc02520a59e2bc&scene=21#wechat_redirect golang的基本数据类型-整型 种类  有符号(负号)  1. int8 int16 int32 int64 无符号(无符号)  1. uint8 uint16 uint32 uint64 架构特定(取决于系统位数)  1. int uint 类型别名  1. Unicode字符rune类型等价int32  2. byte等价uint8 特殊类型  1. uintptr,无符号整型,  2. 由系统决定占用位大小,足够存放指针...阅读全文

博文 2018-08-13 18:35:56 one_zheng

6.Golang数字操作

Go 语言具有严格的静态类型限制,运算符操作的数字类型必须是相同类型数据。且数字操作不能超出该类型的取值范围,不然计算溢出得到的结果就是错的。 一、加减乘除、取模 package main import "fmt" func main() { // 加 + var ui1, ui2 uint8 ui1 = 1 ui2 = 2 ui := ui1 + ui2 fmt.Println(ui) // 输出:3 ui += 255 fmt.Println(ui) // 溢出后计算的值就是错的,输出:2 // 减 - var i, j int32 i = 10 j = 5 fmt.Println(i - j) // 输出:5 // 乘 * var f1, f2 float32 f1 = 1.2 f2 ...阅读全文

博文 2018-11-11 22:34:40 野尘lxw

数据结构和算法(Golang实现)(29)查找算法-2-3树和左倾红黑树

2-3树和左倾红黑树 某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学。在这里,我们区分开左倾红黑树和普通红黑树。 红黑树是一种近似平衡的二叉查找树,从2-3树或2-3-4树衍生而来。通过对二叉树节点进行染色,染色为红或黑节点,来模仿2-3树或2-3-4树的3节点和4节点,从而让树的高度减小。2-3-4树对照实现的红黑树是普通的红黑树,而2-3树对照实现的红黑树是一种变种,称为左倾红黑树,其更容易实现。 使用平衡树数据结构,可以提高查找元素的速度,我们在本章介绍2-3树,再用二叉树形式来实现2-3树,也就是左倾红黑树。 一、2-3 树 1.1. 2-3 树介绍 2-3树是一棵严格自平衡的多路查...阅读全文

博文 2020-04-07 16:33:06 陈星星

go语言学习-iota和左移右移的用法

在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 左移运算符"<<“是双目运算符。左移n位就是乘以2的n次方。 其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<"右边的数指定移动的位数,高位丢弃,低位补0。 右移运算符">>“是双目运算符。右移n位就是除以2的n次方。 其功能是把”>>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数。 package iota import "fmt" func Test() { const( c1 = iota //c1=0 c2 = iota //c2=1 c3 = iota //c3=2 )...阅读全文

博文 2019-01-31 18:31:05 len_yue_mo_fu

Golang中位运算的详细理解

前言:位运算可能在平常的编程中使用的并不多,但涉及到底层优化,一些算法及源码可能会经常遇见。今天就学习一下常用的位运算一、常用的位运算: & 与 AND | 或OR ^ 异或XOR &^ 位清空 (AND NOT) << 左移 >> 右移 二、位运算的用法: 位运算都是在二进制的基础上进行运算的,所以在位运算之前要先将两个数转成二进制1. & & 只有两个数都是1结果才为1 例:var i uint8 = 20 var j uint8=15 求i&j i转成二进制为0001 0100, j转成二进制为0000 1111 0001 0100 & 0000 1111 = 0000 0100 0000 0100对应的十进制就是4 2. | 或 两个数有一个是1 结果就是1 0001 0100 | ...阅读全文

博文 2019-02-01 11:31:39 skh2015java

x 的平方根

实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 Golang解决: package main import "fmt" func binaryFind(x, l, r int) (t int) { m := (l + r + 1) >> 1 if x < m*m { t = binaryFind(x, l, m-1) } else if (m+1)*(m+1) < x { t = binaryFind(x, m, r) } e...阅读全文

博文 2020-02-27 09:32:40 CancerTiN

2019-08-22【LeekCode题库problem-3】

GitHub 地址:coffeeTu-code LeekCode 地址:题库 Language:Golang /* @题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 @示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 @示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 @示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 @题目大意 在一个字符串重寻找没有重复字母的最长子串。 @解题思路 滑动窗...阅读全文

博文 2019-08-23 04:32:48 CoffeeRabbit

go语言20小时从入门到精通(三、运算符)

##3.1 算术运算符 ##3.2 关系运算符 ##3.3 逻辑运算符 ##3.4 位运算符 位运算参考 &与:需要两个输入数的同一位都为1时才为1,其余为0 |或:两个输入数的同一位都不为0(即任意一个为1,或都为1)为1,其余为0 ^异或:两个输入数的同一位不同为1,如果相同就设为0 ~取反:对一个操作数的每一位都取反 <<左移:头部一位被丢弃位,尾部一位空位用0填充 >>右移:尾部一位被丢弃,头部一位空位用0填充 ##3.5 赋值运算符 ##3.6 其他运算符 3.7 运算符优先级 在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。 下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低...阅读全文

博文 2019-09-18 01:34:45 后端小黑胖

[golang] Blowfish算法的go实现

最近由于工作的需要,需要的实现一个go的Blowfish算法。其实go本身有一个加密算法库crypto,其中有Blowfish。但是该算法在很多细节上跟我的需求不同,导致最终加密结果千差万别。 Blowfish算法 BlowFish是对称加密算法的其中一种。在很多场景下,作为DES的替代出现。BlowFish并不是直接用我们指定的密钥对数据加密,而是先对密钥进行预处理,然后用处理的结果再对数据加密。解密过程同理。 BlowFish算法内置两个源密钥:pbox和sbox,pbox18位数组,sbox4个256位数组组成。算法在加密解密时,根据两个盒子大量使用位移运算和逻辑位运算。具体的算法细节自行百度/谷歌,本文就不详述了。 GO实现 1. 生成pbox和sbox 几个重要的变量声明 var ...阅读全文

博文 2017-09-24 15:04:55 king_wang

Golang中位运算的详细理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kwame211/article/details/79193164 前言: 位运算可能在平常的编程中使用的并不多,但涉及到底层优化,一些算法及源码可能会经常遇见。今天就学习一下常用的位运算 一、常用的位运算: & 与 AND | 或OR ^ 异或XOR &^ 位清空 (AND NOT) << 左移 >> 右移 二、位运算的用法: 位运算都是在二进制的基础上进行运算的,所以在位运算之前要先将两个数转成二进制 1. & & 只有两个数都是1结果才为1 例:var i uint8 = 20 var j uint8=15 求i&j i转成二进制为0001 0100, j转成二进制为0000 1111 0...阅读全文

博文 2019-01-14 14:31:35 kwame211

Learn Golang in Day 4

Learn Golang in Day 4 大纲 Go语言运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 算术运算符 运算符 描述 实例 + 加法 1+2= - 相减 3 * 相乘 / 除法 % 取模 ++ 自增 -- 自减 package main import "fmt" func main() { var a int = 10 var b int = 20 var c int c = a + b fmt.Printf("%d + %d = %d\n", a,b,c) c = a - b fmt.Printf("%d - %d = %d\n", a,b,c) c = a * b fmt.Printf("%d * %d = %d\n",a,b, c) c = ...阅读全文

博文 2019-01-30 00:34:45 笑吧小鸟

试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。

试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。 1.问题描述 已知一个长度为 n 的数组和一个正整数 k,并且最多只能使用一个用于 交换数组元素的附加空间单元,试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。 2.解决思路 根据三步反转法,实现时间复杂度为O(n),空间复杂度为O(1) 过程: 1、将整体数组进行反转,原顺序1,2,3,4,5,6,7,8,9变为9,8,7,6,5,4,3,2,1 2、将前K-1个数进行反转,比如K=2,则结果为:8,9,7,6,5,4,3,2,1 3、将后K个数进行反转,结果:8,9,1,2,3,4,5,6,7 3.代码实现 golang code: package main import "fmt" func Do...阅读全文

博文 2019-06-25 16:03:44 小橙子Chelsea

快速排序及golang实现

快速排序 快速排序思路 快速排序通过分支法的思想,从一个数组中选取一个基准元素pivot,把这个数组中小于pivot的移动到左边,把大于pivot的移动到右边。然后再分别对左右两边数组进行快速排序。 双边循环法 思路 设置两个指针left和right,最初分别指向数组的左右两端。比较right指针指向元素和pivot元素,如果right元素大于pivot元素,right指针左移一位,再和pivot进行比较,如果right元素小于pivot元素的话停止移动,换到left指针。left指针的操作是,left指针指向的元素和pivot元素比较,如果left指向元素小于或等于pivot,left指针右移,如果left元素大于pivot元素,停止移动。左右都停止移动后,交换left和right指向的元...阅读全文

博文 2019-08-29 17:02:40 黄淑宁

variable-precision SWAR算法

目的:计算uint32_t二进制数中1的数量算法实现: uint32_t swar(uint32_t i){ // step 1: 计算出的值i的二进制表示可以按每两个二进制为一组进行分组 // ,各组的二进制表示该组中1的个数 i = (i & 0x55555555) + ((i >> 1) & 0x55555555); // step 2:计算出的值i的二进制表示可以按每四个二进制为一组进行分组 // ,各组的二进制表示该组中1的个数 i = (i & 0x33333333) + ((i >> 2) & 0x33333333); // step 3:计算出的值i的二进制表示可以按每八个二进制为一组进行分组 // ,各组的二进制表示该组中1的个数 i = (i & 0xOFOFOFOF) ...阅读全文

博文 2020-01-09 14:28:33 lobo

6.运算符

Go语言基础之运算符 | Golang 运算符用于在程序运行时执行数学或逻辑运算。 运算符 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。 关系运算符 运算符 描述 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 != 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 > 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 >= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 < 检查左边值是否小于右边值,如果...阅读全文

博文 2020-04-05 13:32:48 雪上霜