先异或,然后统计1的个数。统计1的个数可以移位一位一位看,高级的算法 n&(n-1)会消去n最低位的1.扩展 n&(n-1)==0代表什么意思:n是2的某次方或者n==0;int bitSwapRequired(int a,int b){ int count=0; for(int c=a...
分类:
其他好文 时间:
2014-08-23 16:44:51
阅读次数:
244
逻辑移位:移位产生的空位由0来补充,比如11100右移移位变为01110
算术左移同逻辑移位。
算术右移有两种可选的方案:左边移入的位由0补充,或者由符号位来补充,这两种实现依赖于编译器。11100右移移位结果可能是01110或者11110。
在程序中尽量不使用有符号数的右移操作,这样会使得程序的可移植性变差。
对于有符号数右移,下面的代码可以判断编译器采用的逻辑右移还是算术右移
# i...
分类:
其他好文 时间:
2014-08-23 10:01:40
阅读次数:
179
1、问题背景
以下代码运行的结果为:
A、0 B、16
C、32 D、64
/**
*
*/
package com.you.model;
/**
* @author Administrator
*
*/
public class Right
{
/**
* @param args
*/
public static vo...
分类:
编程语言 时间:
2014-08-21 00:12:53
阅读次数:
233
虽然简单算术操作指令的数目比较多,有15条,但实现方式都是相似的,与前几章逻辑、移位操作指令的实现方式也很类似,不需要增加新的模块、新的接口,只需要修改流水线译码阶段的ID模块、执行阶段的EX模块即可。实现思路如下。
(1)修改流水线译码阶段的ID模块,添加对上述简单算术操作指令的译码,给出运算类型alusel_o、运算子类型aluop_o、要写入的目的寄存器地址wd_o等信息,同时根据需要读取地址为rs、rt的通用寄存器的值。
(2)修改流水线执行阶段的EX模块,依据传入的信息,进行运算,得到运算结果,确...
分类:
其他好文 时间:
2014-08-20 00:01:15
阅读次数:
526
解决传统TCP缺陷:
1、窗口太小,最大65535。
TCP利用了选项功能,其头部存在预留项,用于扩展等用途。窗口扩大选项增加了额外的16位来表示窗口大小,窗口的值由首部的16位大小和选项的16位值共同组成。
不过不是用加法组成的,而是利用移位窗口值的幂来表示的,也就是说如果移位窗口值为 10,那么窗口的最大值就是65535*210,这个值就比较大了,足够表示窗口的大小了。
2、数据包丢失...
分类:
其他好文 时间:
2014-08-19 14:39:04
阅读次数:
340
LEA是微机8086/8088系列的一条指令,取自英语Load effect address——取有效地址,也就是取偏移地址。在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与偏移地址之和得到。地址传送指令之一。取偏移地址指令指令格式如下:LEA reg16,memLEA指令...
分类:
其他好文 时间:
2014-08-18 16:13:02
阅读次数:
411
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
输入:多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。...
分类:
其他好文 时间:
2014-08-16 13:50:10
阅读次数:
189
int b = 0, c = 0;// b 输入的0~255之间的数 c 移动位数
printf("请输入一个整数和移动位数\n");
scanf("%d%d", &b, &c);
unsigned char a = b;
unsigned char left = 0;//存储左移之后的结果
unsigned char right = 0;...
分类:
编程语言 时间:
2014-08-15 09:33:07
阅读次数:
255
java移位运算符不外乎就这三种:>(带符号右移)和>>>(无符号右移)。1、 左移运算符 左移运算符> num num 指定要移位值value 移动的位数。 右移的规则只记住一点:符号位不变,左边补上符号位2)运算规则: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符...
分类:
编程语言 时间:
2014-08-14 23:38:56
阅读次数:
686