一道笔试题。 当时是这样做的 #define N 32 void judge(int a, int b){ int c=a+b; a>>=N-1; b>>=N-1; c>>=N-1; if(!((c^a)^(C^B))) printf("over flow\n"); else printf("no\n"); } 感觉写的不太对啊,一点都不通用还很麻烦。 请教大家。 还有一题是说一般内存都是4字节对齐,但是如果要处理没有字节对齐的情况怎么办,让你写一个优化的memcpy函数考虑了这总情况。 这题我没搞懂什么意思。 谢谢。...
1. 按位与运算 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为000...
看一些C源码例子中都会出现像下面这样的宏定义 #define IS_ARRAY (1<<0) #define IS_OBJECT (1<<1) #define IS_METHOD (1<<2) 上面的表达式的运算结果应该是:1, 2, 4,也就是跟下面的应该是等同的 #define IS_ARRAY 1 #define IS_OBJECT 2 #define IS_METHOD 4 不知道这两种用法有什么区别,哪一种更好或是适合哪种情况,还有的使用下面的方法 #define STATIC 0x01 #define ABSTRACT 0x02 #define FINA...
对于一个32位数,我想取出以下12个bit (画x和y的) xxxxxxxx0000000000000000yyyy0000 并组成一个新的数yyyyxxxxxxxx 或 xxxxxxxxyyyy都可以. 怎么用位运算实现呢?
比如下面这个小程序:
[code]
#include
看LDD中有些例子涉及到位运算,不太懂,请指点 okdval = readb (base + add); writeb (oldval^0xff,base + add); mb(); newval = readb(base + add); if ((oldval^newval) == 0xff) { ......} if (oldval^newval)!=0){......} if (oldval == 0x55)&& (readb(base + add + 1)==0xaa)){ ... add +=(size&~2048)-2048; ...} 这些位运算有什么作用,还有看到有些if语句中的条件就是位运算的, 是起什么作用?