精华内容
下载资源
问答
  • 二进制位数,字节、字符

    万次阅读 2016-08-11 21:23:02
    二进制位数,也就是表达一个其他类型的数所需要的二进制数有个,确定整数二进制表示中第一个1 的出现位置。 例如:  2的二进制为 10,占用2个二进制  3的二进制为 11,占用2个二进制  4的二进制为 100...

    1.位数

    • 二进制位数,也就是表达一个其他类型的数所需要的二进制数有几个,确定整数二进制表示中第一个1 的出现位置。
      例如:
       2的二进制为 10,占用2个二进制位
       3的二进制为 11,占用2个二进制位
       4的二进制为 100,占用3个二进制位
    • 再例如,int型是32位,什么意思呢,也就是所它最大可以占32个2进制位 也就是100000000000000000000000000000,它的最高位在第32个二进制数上
      那为什么int的最大取值不是2(32)+2(31)·····呢,因为它的最大取值就是2的31次方,而1也正好在二进制位数的32个数字上,所以它是32位的。

    2.字(word)字节(byte)、字符 、位数(bit)

       1word = 2byte=16bit

    • 位:bit
    • 字节(Byte):是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。1byte = 8bit
    • 字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。
    • 它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:

      ASCII码中,一个英文(字符)字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

      UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

      Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

      符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

      UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

      UTF-32编码中,世界上任何字符的存储都需要4个字节。

      摘自:http://zhidao.baidu.com/link?url=U1Y4UO2Fdm63eh2bVjFONKSqaw6Ub0FQR4j1WmduuEcjop4lDsBy7dWdNR51Dnuny52cnh22CEhrhlytZwty_25xJ1GhNP9RuHXbAkLqDMa
    展开全文
  • 假设有这么一个函数valueAtBit(num, bit),输入一个十进制数num,求它的二进制数的bit是多少(注意bit应该从1算起) 以下是几种实现方法的总结: 方法一,最硬核的方法 这个方法模拟了平时我们计算二进制数的过程...

    题目描述:
    假设有这么一个函数valueAtBit(num, bit),输入一个十进制数num,求它的二进制数的bit位是多少(注意bit应该从1算起)
    以下是几种实现方法的总结:

    方法一,最硬核的方法

    这个方法模拟了平时我们计算二进制数的过程:

    1. num除以2,求出得商和余数(假设商为resu,余数为rest)
    2. 拿上次的商resu再除以2,求得新的商resu和本轮的余数rest
    3. 重复1、2步操作,直至商resu为0
    4. 倒序将所有的余数rest拼接即为该十进数的二进制表示

    将上述过程实现成js代码如下:

    function valueAtBit1(num, bit) { // 方法一
    	var result = [];
    	var rest = 0;
    	var resu = num;
    	while (resu != 0) {
    		rest = resu % 2;
    		resu = parseInt(resu / 2);  // 这里不要漏掉将小数转成整数
    		result.push(rest);  // 这里的数组即为存储二进制数的各个位数(字符类型)
    	}
    	return result[bit - 1];  // 这里是应题目要求,求bit位的
    }
    

    方法二,使用js自带方法toString

    function valueAtBit2(num, bit) { // 方法二
    	var binary = num.toString(2);
    	return binary[binary.length - bit];
    }
    

    toString接收一个参数radix(基数),表示你要把该数字对象(注意是数字对象才包含该方法,不可以是字面量)转成几进制的字符串。

    方法三,使用移位操作

    function valueAtBit3(num, bit) { // 方法三
    	return num >> (bit - 1) & 1; //下面两种不可以, 因为只有与运算才能把除第一位以外的其他位“置零”.
    	// return num >> (bit - 1) | 0;
    	// return num >> (bit - 1) ^ 0;
    }
    

    这个方法是跳过求二进制数这个过程,直接求bit位的,因为移位操作只能是对二进制进行运算,所以这里可以直接用num,>>会隐式转换成二进制。
    这个方法的原理是这样的:(不过如果大家看不懂以上的语句,建议在这之前先看一下位运算的基础知识哈)

    1. 先让所求位向右移到第一位,这时左边空出来的位会自动补0,先叫它“已移位的num”
    2. 让移位操作后的这个数和1相与(1的二进制除第一位左边全为0),这样相与了之后,得到的结果是除第一位之外的其他位都变为0,此时按照相与运算的运算规则:- 如果“已移位的num”第一位是0那么相与之后是0;- 如果“已移位的num”第一位是1那么相与之后是1。此时返回的结果便是所求。

    可能我陈述得有点乱,不过大家可以亲测一下,原理很巧妙哦。

    方法四,仅使用位相与操作

    function valueAtBit4(num, bit) { // 方法四
    	var binary = Math.pow(2, bit - 1);
    	return (num & binary) == 0 ? 0 : 1; // ==比&优先级要高所以需要加括号
    }
    

    该方法与方法三有点相似,不过这个方法不需进行移位操作,而是先生造一个与所求位匹配的二进制数,让它们俩相与,如果结果为非零则返回1,结果为零则返回0
    比如说要求29的二进制数的第3位,那么过程如下:

    1. 29 的二进制表示为 11101(这个过程由位操作符自动转换)
    2. 求第 3 位,那么生造一个二进制数 00100(除所求位为1,其他位为0),能达到这个效果的就需要用到Math.pow()这个方法了
    3. 让1、2步的这两个数进行位相与,结果是除所求位之外的其他位变为0,所求位如果原来是1则相与之后该位为1;,所求位如果原来是0则相与之后该位为0;(在本例中结果为 00100)
    4. 通过三元表达式判断结果并返回:判断第3步的结果是否为0,如果为零则返回0,如果非零则返回1(在本例中,结果00100即为十进制的4,非零,所以返回1)

    我们可以验证一下结果,返回的1在原来的11101的第三位中确实是1,大家也可以验证看看其他位。原理也比较巧妙哦。
    其中方法三和方法四学自牛客网的巨佬们,在这里要谢谢各位巨佬们。
    同时也感谢读者们能读到最后,阿里嘎多~

    展开全文
  • 输出n的二进制数第k位是几 1、题目: n为十进制数,k为要输出的位数。 输入样例: 11 2 输出样例: 0 2、基本思路: 用n右移k(x = n >> k),看个位是几(x & 1),即 x >> k & 1 3、C++代码...

    输出n的二进制数第k位是几

    1、题目:
    n为十进制数,k为要输出的位数。

    输入样例:
    11 2
    输出样例:
    0

    2、基本思路:
    用n右移k位(x = n >> k),看个位是几(x & 1),即 x >> k & 1

    3、C++代码如下(该代码引用AcWing网站的代码):

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int n, k;
    	cin >> n >> k;
    	
    	cout << (n >> k & 1) << endl;
    	
    	return 0;
    }//该代码引用AcWing网站的代码
    
    展开全文
  • Python读字节某一的值,设置某一的值,二进制位操作在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用的是二进制字节串方式进行的通信协议封装,更会把0和1、True和False、Yes和No这样的...

    Python读字节某一位的值,设置某一位的值,二进制位操作

    在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用的是二进制字节串方式进行的通信协议封装,更会把0和1、True和False、Yes和No这样的布尔值每8个只占用一个字节,用字节中的位来表示。减少传输量,减少对网络稳定性的要求。这就带来了要怎么读某个字节中每一位的值和怎么设置每一位的值的问题。

    这几天再写培训演示代码,顺便就写了两个函数,解决字节位值读写问题,现在分享给大家。

    下面直接上代码,在Python3上测试通过:

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    def get_bit_val(byte, index):

    """

    得到某个字节中某一位(Bit)的值

    :param byte: 待取值的字节值

    :param index: 待读取位的序号,从右向左0开始,0-7为一个完整字节的8个位

    :returns: 返回读取该位的值,0或1

    """

    if byte & (1 << index):

    return 1

    else:

    return 0

    def set_bit_val(byte, index, val):

    """

    更改某个字节中某一位(Bit)的值

    :param byte: 准备更改的字节原值

    :param index: 待更改位的序号,从右向左0开始,0-7为一个完整字节的8个位

    :param val: 目标位预更改的值,0或1

    :returns: 返回更改后字节的值

    """

    if val:

    return byte | (1 << index)

    else:

    return byte & ~(1 << index)

    print(get_bit_val(3, 2)) # 3的2进制00000 0 11,2号位是0,打印结果0

    print(get_bit_val(3, 1)) # 3的2进制000000 1 1,1号位是1,打印结果1

    print(get_bit_val(3, 5)) # 3的2进制00 0 00011,5号位是0,打印结果0

    print(set_bit_val(3, 2, 1)) # 3的2进制00000 0 11,2号位改成1,打印结果7(00000111)

    print(set_bit_val(3, 1, 0)) # 3的2进制000000 1 1,1号位改成0,打印结果1(00000001)

    print(set_bit_val(3, 5, 0)) # 3的2进制00 0 00011,5号位改成0,打印结果3(00000011)

    """

    控制台输出:

    0

    1

    0

    7

    1

    3

    """

    展开全文
  • 算法 特殊进制位数

    2020-10-24 17:53:06
    给定一个正整数,如果把它转为十六进制,那么它几位数字呢? 示例 1: 输入:12345678 输出:6 解释:12345678转成十六进制为0x BC614E,即6位. 示例 2: 输入:0x12345678 输出:8 示例 3: 输入:0X12AB34 ...
  • 二进制

    2021-02-01 11:17:29
    二进制 求 n 的第 k 位数 :n >> k & 1 ; 返回 n 的最后一 1 :...看个位是几 x & 1 ; 代码样例 十进制 n = 10 ; 二进制 n = 1010 ; #include<iostream> using namespace std; int main
  • 二进制 字节 字符

    2017-11-16 16:21:21
    1.位数二进制位数,也就是表达一个其他类型的数所需要的二进制数有个,确定整数二进制表示中第一个1 的出现位置。例如: 2的二进制为 10,占用2个二进制 3的二进制为 11,占用2个二进制 4的二进制为 100,占用...
  • 主要通过修改子网实现。 通俗点说就是合为一个网段。 要计算IP地址聚合后的地址, 其实就是比较个IP的网络前缀,相同的部分有多少, 这多少就是聚合后的IP, 子网掩码就是把相同的网络前缀变为1,剩下的为...
  • 计算机的二进制

    2020-02-02 15:15:34
    10进制是数到9就加进一: 10进制是 百位 千位 万位 … ...在2进制位数个2,那么数字就有个0 10进制转2进制 2进制转10进制 将这些加起来,就是10进制的数...
  • 假如只有一位二进制可以表示出个地址数据呢? 0 (1个地址数据) 1 (1个地址数据) 1+1=2(一位二进制可以表示出2个地址啦) 总结一下2是不是2的1次方呀?(也就是2的 位数次方呀) 假如只有2位二进制可以表示出...
  • 展开全部1010二进制和十进制的进位制度相同的,只不32313133353236313431303231363533e58685e5aeb931333365666239过把逢十进一变成了逢二进一,比方说运算10的转换,我们可以先考虑102的次方,结果就是2^3=8和...
  • 从最低位(最右)算起,位上的数字乘以本位的权重,权重就百2的第几位位数减一次方。 比如第2位就是2的(2-1次)方,就是2;第8位就是2的(8-1)次方128。把所有度的值加起来。 2(1-1)代表2的0次方,就是1...
  • 通常想到的办法不断右移,不断判断(记住右移与左移针对二进制中所有位数的,并非简单末尾指针的移动) 代码如下: int fib(int n)//还可以继续优化 { int count=0; for(int i=0;i<32;i++) if((n>>i)&...
  • 二进制机器的语言,它与我们常用的十进制数存在着转化的方式 ... 二进制转化十进制:找到所有二进制数为1的,然后将2的位数减一次幂相加即可得到相应的十进制数。 转载于:https://www.cnblogs.com/...
  • 给定两个整数A和B,需要改变二进制位才能将A转为B。 输入 1行:A和B,空格隔开 输出 需要改变的位数 样例输入 10 8 样例输出 1   解题思路: 运算: A^A=0 A^0=A 判断奇偶性:(x&amp;1==...
  • 二进制选取指定位置

    千次阅读 2019-11-30 14:18:06
    编写一个函数getbits,从一个32位的整数中取出某几位,即取出的这些位保留原值,其余位为0。取出的位数定义为从右边数的第n1位到第n2位,请注意最右边的位第0位。函数的调用形式为getbits(value, n1, n2)。给定...
  • 1 不要化成十进制求和再返回二进制,因为二进制String位数有可能非常多,没法进行计算,因此一进行运算才行 2 String无法用索引得到里面的字符的,要用charAt(index)方法 3 想要得到字符转int,用 (int)字符...
  • 【问题描述】: 两个int(32)整数m和n的二进制表达中...我们先将两个数异或在一起,那么它的二进制中有个1,就有位数不同。怎么求一个数二进制中1的个数,请看我前边写过的一篇博客------&gt;【参考代...
  • 1.32位是几个字节?  1字节=8(bit);所以32就是4个字节。 2.01011100对应的十进制是多少? 92 3.00001111左移两结果是多少?有什么规律? 111100,大小=原数 x 2^(左移的位数) 4.以补码形式表示的二进制...
  • 通过等比数列前n项和公式a1(1−qn)/(1−q)a_1(1-q^n)/(1-q)a1​(1−qn)/(1−q)判断出n是几位数以及是k位数中的第几个后,就可以按照二进制是0或1进行输出。 例如: 第8个数是三数,是三数中的第2个,2用三个...
  • 程序员二进制计算器 v1.36

    热门讨论 2014-07-16 16:21:43
    其中,m和n都整数,m指定总位数,n指定小数点后保留几位,如果m或n不足,则按实际位数输出。 例1:指定小数点后保留2位,其余位四舍五入: %.2f 3.14159 = 3.14 例2:指定全部5位,且小数点后保留3位,其余位...
  • 每8位二进制,各位从左到右对应的权值分别128,64,32,16,8,4,2,1。(即2的n-1次方,n从右到左...137=128+8+1,所以这个权值对应的应该1,其他为0,化为二进制:10001001 强ip化为二进...
  • 题目让求从a加到b的二进制进位次数之和。题目给的从a到b每次进行两个数的加法,然后求和。...然后把二进制位数扫一遍就行了。 现在的麻烦怎么统计a到b的二进制的各位上有个1。通过找规律我们知道:对于二
  • Redis二进制数组Bitmap

    千次阅读 2019-03-20 20:13:50
    好久没有更新了,之前公司在做 关注/粉丝 这块儿缓存的时候,我选择的就是 Bitmap ,那时我第一次见识到这种数据数组...关注关系需求中 关注对象 和 被关注人 都 0-千万 的数据对象,存储这种对应关系时,采用...
  • 题目:给出一个不多于5 位数的正整数,要求: 1、求出它是几位数;2、按逆序输出各位数字,例如原数为321,应输出123;3、分别输出每一位数字。 1、求位数:对于数字n来说,我们采用“丢弃个位数”的思想,即每做一...
  • ①先转化为2进制位,使用大整数进行8次 mod 2操作,得出8位二进制,再转为为16进制。【此思路进行8次mod运算,较繁琐,但准确有效】 ②忽略大整数前面几位。例如10000可整除16,因此恰好可以万位数以上,即直接使用...
  • 求出不相同的位数是哪些位,异或^,x^y,求出的结果为1的位数即为不相同的位数2求出为1的位数有几位,可以采用以下思路将异或后的结果设为a=x^y,如果a!=0,count++;将a中最后一个1变为0;(采用a&amp;a-1实现,eg...
  • 如何判断一个数为几进制

    千次阅读 2019-10-01 23:24:22
    二进制:里面只有0和1 八进制: 以0开头的数,如075,023,012等.每单个数在0-7之间(含). 十六进制: 以0x开头的数,如0x12,x12ff,0x86等. 十进制: 第一位数不是0,不以0x开头.每单个数在0-9之间(含). 转载于:...
  • 进制转换

    2017-06-22 15:47:23
    从最低位(最右)算起,位上的数字乘以本位的权重,权重就是2的第几位位数减一次方。比如第2位就是2的(2-1次)方,就是2;第8位就是2的(8-1)次方128。把所有的值加起来。 2(1-1)代表2的0次方,就是1;其他...
  • 两个数的二进制位数差异有个? 先转换成二进制格式 A = 1100100 B = 0110010 掰指头用眼睛数一下,4个不同。 那么对比的方式可以用XOR解决。 A XOR B = 1010110那么不同的就转换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 797
精华内容 318
关键字:

二进制位数是几位