1000问两个个C语言的问题

来源:百度知道 编辑:UC知道 时间:2024/06/11 09:35:38
我用的是C51,在定义变量时,遇到点问题。

1.unsigned int Number;
uchar NUML,NUMH,

这个Number是定义的整形,我想把Number拆成两部分,一部分是高八位,一部分是低八位,现在如下:

NUMH=Number/256;
NUML=Number%256;

但是,编译时候,就会警告,不同的类型,那么该如何把Number分成两部分,我上面的分法会出现什么结果,我如果就想分到字符变量里该如何分。

2.给我解释一下这条语句((address >> 8) << 1),address是无符号整形,在执行玩这条语句后,address会如何变化。

3.不要担心我分不够,我提了好多问题,一直没人回答,现在还没给分。

4.不要复制贴。

5.谢谢了。
回答得好,人人都有分啊,呵呵呵

页写就可以的

low: Number & 0xff
high: (Number >>8) & 0xff

int 是16位的阿?

typedef unsigned char uchar;
typedef unsigned int uint;

NUML = (uchar)((uint)(Number) & 0xff);
NUMH = (uchar)(((uint)(Number) >> 8) & 0xff);

((address >> 8) << 1)

右移8位,后左移1位,相当於把高8位的数*2

1,你那种方法是可以的,编译器有警告是正常的,但是警告不等于错误,这个是可以跑的,如果你不想看到警告,可以加个强制类型转换
NUMH=(uchar)(Number/256);
NUML=(uchar)(Number%256);
2,这个实际上是address右移8位,后再左移1位,相当于把整形数的高位放到低位,然后再乘以2

1.unsigned int Number;
可以考虑用联合
union{ /*定义一个联合*/
unsigned int Number;
struct{ /*在联合中定义一个结构*/
uchar H,L;
}number;
}N;

例:
N.Number = 0x1234;

那么
N.number.H就等于 0x12
N.number.L 等于 0x34

2.((address >> 8) << 1),

(address >> 8) 这是位移操作,高字节右移动到低字节