1000问两个个C语言的问题
来源:百度知道 编辑:UC知道 时间:2024/06/11 09:35:38
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) 这是位移操作,高字节右移动到低字节