bit

【数组题目】——剑指offer56-2:数组中唯一只出现一次的数字

走远了吗. 提交于 2020-03-05 07:54:22
面试题56-2数组中出现的次数 题目描述 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 解题思路 位运算 如果一个数字出现3次,那它的二进制对应的每一位(0或者1)也出现三次,将他们累加,则一定可以被3整除。 因此,累加后的和能被3整除,那只出现一次的数字二进制对应的那一位是0,否则为1 注意 if((bit&nums[i])!=0) //!=0和==1不一样!,返回结果为0,1,2,4……每一位不同再转化为十进制对应的值。 具体看下图: 输入数组{8,20,20,20},将 (bit&nums[i]) 的结果输出,显示如上图,可见有输出4,16…… 代码 class Solution { public int singleNumber ( int [ ] nums ) { if ( nums == null || nums . length <= 0 ) { return - 1 ; } int len = nums . length ; int [ ] bitSum = new int [ 32 ] ; for ( int i = 0 ; i < len ; i ++ ) { int bit = 1 ; //从低位开始判断 for ( int j = bitSum . length - 1 ; j >= 0 ; j --

36 Sort Integers by The Number of 1 Bits

一笑奈何 提交于 2020-03-02 07:50:29
题目 Given an integer array arr. You have to sort the integers in the array in ascending order by the number of 1’s in their binary representation and in case of two or more integers have the same number of 1’s you have to sort them in ascending order. Return the sorted array. Example 1: Input: arr = [0,1,2,3,4,5,6,7,8] Output: [0,1,2,4,8,3,5,6,7] Explantion: [0] is the only integer with 0 bits. [1,2,4,8] all have 1 bit. [3,5,6] have 2 bits. [7] has 3 bits. The sorted array by bits is [0,1,2,4,8,3,5,6,7] Example 2: Input: arr = [1024,512,256,128,64,32,16,8,4,2,1] Output: [1,2,4,8,16,32,64,128

嵌入式系统基础概念(二)常用术语和整数类型转换

一个人想着一个人 提交于 2020-03-01 20:22:05
常用术语 比特(Bit) :最小可操作单位 字节(Byte) :最小存储单位, = 8 Bit,如下表,b7称 MSB (Most Significant Bit),b0称 LSB (Least Significant Bit) 因为b7=1等价于 ,而b0=1等价于 MSB LSB b7 b6 b5 b4 b3 b2 b1 b0 半字(HALF WORD):二个字节或者16bit, b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 字(WORD):四个字节或者32bit 表征范围(Alternatives) :可能性总数。 一个比特,最多两种可能,0 或 1。 一个字节,包含8个比特,每个比特两种可能,所以,最多256种可能。 比特数 (最小)字节数 可能数 8 1 256 10 2 1024 (1K) 12 2 4096 16 2 65536 20 3 1,048,576 (1M) 30 4 1,073,741,824 (1G) n n/8向上取整 精度(Precision) :可表示数值的多少。和表征范围息息相关。 分辨率(Resolution) :可分辨的最小差异。 举例,测量0-3.3V模拟信号输入,12bit ADC 分辨率 (3.3-0)/ =0.8mV,精度是12位(4096个数值)。 良好编程习惯

HowTo: Install the IBM Notes 9.0 client on Ubuntu

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-01 03:28:03
IBM Notes (formerly Lotus Notes) is a corporate email and database collaboration tool. It’s still popular and widely used, and at the time of writing is now up to version 9.0. Unfortunately IBM have a bad habit of assuming no-one uses 64-bit operating systems (yes, even in 2014), so with the exception of the Apple OS X version which doesn’t have a 32-bit version at all, IBM continues to compile the Linux and Windows versions as 32-bit only applications. Installing the 32-bit Linux version does not work on 64-bit Ubuntu/Debian systems “out of the box” because of some hard-coded 32-bit only pre

常用u-boot命令详解(全) .

三世轮回 提交于 2020-02-29 04:10:54
U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,命令行模式模式下支持 “Tab”键的命令补全和命令的历史记录功能 。而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。 [ u - boot@MINI2440 ] # version U - Boot 2009 . 11 ( 4月 04 2010 - 12 : 09 : 25 ) [ u - boot@MINI2440 ] # v U - Boot 2009 . 11 ( 4月 04 2010 - 12 : 09 : 25 ) [ u - boot@MINI2440 ] # base Base Address : 0x00000000 [ u - boot@MINI2440 ] # ba Base Address : 0x00000000 由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧! (1)获取帮助 命令:help 或 ? 功能:查看当前U-boot版本中支持的所有命令。 [ u - boot@MINI2440 ]

LINUX设置SUID,SGID,Stick bit

倾然丶 夕夏残阳落幕 提交于 2020-02-28 20:51:18
前面介绍过SUID与SGID的功能,那么,如何打开文件使其成为具有SUID与SGID的权限呢?这就需要使用数字更改权限了。现在应该知道,使用数字 更改权限的方式为“3个数字”的组合,那么,如果在这3个数字之前再加上一个数字,最前面的数字就表示这几个属性了(注:通常我们使用chmod xyz filename的方式来设置filename的属性时,则是假设没有SUID、SGID及Sticky bit)。 4为SUID 2为SGID 1为Sticky bit 假设要将一个文件属性改为“-rwsr-xr-x”,由于s在用户权限中,所以是SUID,因此,在原先的755之前还要加上4,也就是使用“chmod 4755 filename”来设置。 SUID也可以用“chmod u+s filename”来设置,“chmod u-s filename”来取消SUID设置;同样,SGID可以用“chmod g+s filename”,“chmod g-s filename”来取消SGID设置。 一般来说,使用过Linux的同学都知道,Linux文件的权限有rwx,所有者、所有组、其它用户的rwx权限是彼此独立的。为此,经常会听到如果某个web文件需要被修改的话,需要加上777的权限,这就是让所有用户可写。 但仔细一想,这样的权限未免有些想得比较天真,没有考滤特殊情况。例如/tmp目录默认权限是777

RFC笔记—Neighbor Discovery for IP version 6 (IPv6)

末鹿安然 提交于 2020-02-28 14:09:52
Router Solicitation Message Source Address An IP address assigned to the sending interface, or the unspecified address if no address is assigned to the sending interface. Destination Address Typically the all-routers multicast address. 源IPv6地址:在lwip中,要么是链路本地地址,要么是任意地址IP6_ADDR_ANY6,也就是全零地址。 目的IPv6地址:所有路由器多播地址,FF02::2(多播地址FF::/8,第一个02表示scope是链路本地,第二个02是所有路由器) Router Advertisement Message 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

雪花算法-JAVA实现代码

…衆ロ難τιáo~ 提交于 2020-02-28 12:22:13
package demo; /** * 雪花算法demo * <p> * Snowflake生成的是Long类型的ID,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特。 * <p> * Snowflake ID组成结构:正数位(占1比特)+ 时间戳(占41比特)+ 机器ID(占5比特)+ * 数据中心(占5比特)+ 自增值(占12比特),总共64比特组成的一个Long类型。 * 第一个bit位(1bit):Java中long的最高位是符号位代表正负,正数是0,负数是1, * 一般生成ID都为正数,所以默认为0。 * 时间戳部分(41bit):毫秒级的时间,不建议存当前时间戳,而是用(当前时间戳 - 固定开始时间戳)的差值, * 可以使产生的ID从更小的值开始;41位的时间戳可以使用69年, * (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69年 * 工作机器id(10bit):也被叫做workId,这个可以灵活配置,机房或者机器号组合都可以。 * 序列号部分(12bit),自增值支持同一毫秒内同一个节点可以生成4096个ID * * @author 杨亚旭 * @version 1.0 * @date 2020/2/28 11:02 */ public class SnowFlakeDemo { /**

单片机 MSP430G2553 FLASH 操作

痴心易碎 提交于 2020-02-28 04:50:17
//FLASH操作 写入 void write_SegC ( char value [ ] , char lenChar ) { char * Flash_ptr ; // Flash pointer char i ; Flash_ptr = ( char * ) 0x1040 ; // Initialize Flash pointer FCTL1 = FWKEY + ERASE ; // Set Erase bit FCTL3 = FWKEY ; // Clear Lock bit * Flash_ptr = 0 ; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT ; // Set WRT bit for write operation for ( i = 0 ; i < lenChar ; i ++ ) { * Flash_ptr ++ = value [ i ] ; // Write value to flash } FCTL1 = FWKEY ; // Clear WRT bit FCTL3 = FWKEY + LOCK ; // Set LOCK bit } //FLASH操作 读取 void read_SegC ( char value [ ] , char lenChar ) { char *

Verilog 学习笔记-urat串口

▼魔方 西西 提交于 2020-02-27 14:18:20
串口:    串口在嵌入式设备里经常会用到,串口主要包括RS232C串口,RS485串口等,他们只是电平不一样。   RS232也称标准串口,是一种比较常用的串口,采用标准的DB9接口,RS232采用的是负逻辑电平,即-12~-5V表示逻辑1,+5~+12V表示逻辑0。   一般的MCU或者FPGA的管脚只能输出TTL电平,所以一般需要采用想MAX232等电平转换芯片将UART的TTL电平转换成RS232电平。 UART:   UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信。 UART传输协议:    UART一般具有11个bit位,包括一个起始位,8个数据位,一个校验位,一个停止位,校验位可以省掉。    verilog代码实现:   现以将FPGA接收到上位机的数据然后再将这些数据发送回上位机显示为例,整个串口部分可以分别分为 接收 和 发送 模块。   首先接收模块:      接收模块主要包含时钟复位输入,以及8个串行数据输入,以及将接收到的串行数据转换成并行数据输出,并输出一个接收完成标志位。   同时在接收模块内产生串口接收所需要的波特率。 接收模块代码如下:    `timescale 1ns / 1ps //////////////////////////////////////