m104w取出硒鼓x从第m位开始向左的n位

I have a 32-bit number and without using for loop, I want to set m bit to n bits.
For example:
m bit may be 2nd or 5th or 9th or 10th.
n bit may be
22nd or 27 or 11th bit.
I assume (m & n).
Please help me.Thanks
解决方案 Although the question has been closed, but as I was not sure for my old answer. I have updated with tested code. Hope it would be helpful for someone in future.
Suppose Bits are numbered from LSB to MSB:
BIT NUMBER
number bits
LSB - Least Significant Bit (numbered 0)
MSB - Most
Significant Bit (numbered 31)
Above in figure, I have shown that how bits are numbered from LSB to MSB.
Notice the relative positions of n and m where n & m.
To Set all bits One from n to m
To set-1 all bits from position m to n (where n & m) in a 32-bit number.
You need a 32 bit mask in which all bits are 1 from n to m and remaining
bits are 0.
For example to set all bits from m=17 to n=27 we need mask like:
BIT NUMBER
And if we have any 32-bits number, by bitwise OR (|) with this number we can set-1 all bits from m to n. And other bits will be unchanged.
remember OR works like:
x value can be
1 or 0 any.
So by doing:
num32bit = num32bit |
we can set n to m bit 1 and remaining bits will be unchanged. An example,
Suppose, num32bit = 00 01
&--- num32bit
----------------------------------------
---------------Bitwise OR operation
&--- new number
-------------------
|-----------|
this bits are from `num32bit`
all bits are
"This is what I means by":
num32bit = num32bit |
How to make Mask?
To make mask in which all bits are 1 from n to m and other are 0.
we need Three steps:
Create mask_n: All bits on Right side from n=27 are one
BIT NUMBER
In programming this can be create by Right-Shift >> 4 times.
And, How 4 came?
4 = 32 - n - 1
==& 31 - 27 ==& 4
Also note in complement (~) form of 0
all bits are one.
and we need
Link to learn difference between
Create mask_m: All bits on left side from m=17 are one.
BIT NUMBER
Create mask: Bitwise AND of above to: mask = mask_n & mask_m:
BIT NUMBER
And, below is my getMask(n, m) function that returns a unsigned number that looks like mask
in step-3.
#define BYTE 8
// Bit_sizeof(char) == BYTE
unsigned getMask(unsigned n,
unsigned m){
byte noOfBits = sizeof(unsigned) * BYTE;
unsigned mask_n = ((unsigned)~0u) && (noOfBits - n - 1),
mask_m = (~0u) && (noOfBits - m),
mask = mask_n & mask_m; // bitwise & of 2 sub masks
To test my getMask() I also written main() code that uses a binary() function, binary() function prints a given number in binary formate.
void binary(unsigned);
int main(){
unsigned num32bit = u;
unsigned mask = 0u;
unsigned rsult32
int i = 51;
mask = getMask(27, 17);
rsult32bit
= num32bit |
//set n to m bits 1
printf("\nSize of int is = %ld bits, and "
"Size of unsigned = %ld e.g.\n", sizeof(int) * BYTE,
sizeof(unsigned) * BYTE);
printf("dec= %-4u, bin= ", 21);
binary(21);
printf("\n\n%s %d\n\t
", "num32bit =", num32bit);
binary(num32bit);
printf("mask\t
binary(mask);
while(i--) printf("-");
printf("\n\t
binary(rsult32bit);
printf("\n");
return EXIT_SUCCESS;
void binary(unsigned dec){
int i = 0,
left = sizeof(unsigned) * BYTE - 1;
for(i = 0; left &= 0; left--, i++){
printf("%d", !!(dec & ( 1 && left )));
if(!((i + 1) % 4)) printf(" ");
printf("\n");
This test code runs like( the output is quite same as I explained in above example):
Output of code:
-----------------
:~$ ./a.out
Size of int is = 32 bits, and Size of unsigned = 32 e.g.
, bin= 00 00
num32bit =
---------------------------------------------------
Additional, You can write
getMask() function in shorter form in two statements, as follows:
unsigned getMask(unsigned n,
unsigned m){
byte noOfBits = sizeof(unsigned) * BYTE;
return ((unsigned)~0u && (noOfBits - n - 1)) &
(~0u && (noOfBits -m));
Notice: I removed redundant parenthesis, to cleanup the code. Although you never need to remember precedence of operators as you can overwrite precedence using (). But a good programmer always referees to precedence table to write neat code.
And Better approach may be to write Macro() as below:
#define BYTE 8
#define _NO_OF_BITS sizeof(unsigned) * BYTE
#define MASK(n, m)
(((unsigned)~0u && (_NO_OF_BITS - n - 1)) & \
(~0u && (_NO_OF_BITS - m)))
And call like:
rsult32bit
= num32bit | MASK(27, 17);
To Set all Zero bits from n to m
To set all bits from n to m = 0, and reset are unchanged you just need complement (~) of mask.
&-- complement
Also instead of | operator to set zero & is required.
remember AND
works like:
where x value can be 1 or 0 any.
Because we already have a bitwise complement ~ operator and and
& operator. We just need to do.
[SOLUTION]:
rsult32bit
= num32bit & ~MASK(27, 17);
And it will work like:
num32bit =
---------------------------------------------------
本文地址: &
我有一个 32位号,并且不使用for循环,我想设置 M 位到
N 位。 例如:
M 位可能是 2号或 5 或 9 或 10 。结果
N 位可以被 22 或 27 或 11 位。 我假设(M< N)。请帮忙me.Thanks 解决方案 尽管这个问题已经被关闭,但我不知道我的老答案。我曾与测试code更新。希望这将是有人在将来有所帮助。 假设位编号为LSB到MSB: 位数31 0
▼▼比特数00 00
MSB | | LSM
?= 27 M = 17LSB
- 最低有效位(编号0)MSB
- 最高有效位(编号31) 在上面的身影,我已经表明位如何从LSB到MSB编号。注意 N 和 M ,其中 N'GT的相对位置;米。 从n设置所有位一到m 要设定的
从位置所有位的
(其中 N'GT,M )的一个32位数字。你需要一个32位掩码的所有比特都是
从 N 到 M 和剩余位的
例如设置所有位的
我们需要像面膜: 位数31 N = 27 M = 17 0
▼▼▼▼掩模= 11 00
如果我们有任何32位的号码,通过按位OR(
)这个数字,我们可以设定的
从 M 所有的位 N 。和其他位将保持不变。 记住或工作方式类似:
X | 1 = 1,并且X | 0 = X 其中, X
value可以是 1 或 0 任何。 因此,通过这样做的:
num32bit = num32bit |面具; 我们可以设置 N 到 M 位 1 而剩下的位将保持不变。一个例子,假设, num32bit
00 01 < --- num32bit11 00 所述; ---掩模---------------------------------------- ---------- -----位或操作11 01 < ---新号码----▲▲-------------------
| ----------- |此位是从`num32bit`
1在这里“这就是我指”:
num32bit = num32bit |面具;
如何使面膜? 为了让面膜中的所有比特都是 1 从 N 到 M 等都是 0 。我们需要三个步骤:
创建mask_n
:从在右侧所有位N = 27 是一体 位数31 N = 27 0
▼▼▼ mask_27 = 11 11
在这个程序可以通过右移创建>> 4倍。和
4 如何来的?
1 ==> 31
27 ==> 4 此外,在补充说明(?)的形式 0 的所有位是一体的。我们需要unsigned权C.转移结果链接了解与signed和无符号右移
创建mask_m
:从左侧的所有位 M = 17 是一体的。
BIT 31号M = 17 0
▼▼▼ mask_17 11 00
创建面具 :按位与以上为: =面膜&mask_n放大器; mask_m : 面膜= 11 00
▲▲ 位号27 17
和,下面是返回一个无符号数,看起来像在步骤3面膜我的 getMask(N,M)功能。
的#define BYTE 8字符的typedef字节; // Bit_sizeof(焦)== BYTE无符号getMask(无符号N,
无符号M){
字节noOfBits = sizeof的(无符号)* BYTE;
无符号mask_n =((符号)?0U)GT;> (noOfBits
mask_m =(?0U)LT;< (noOfBits
面膜= mask_n&安培; mask_m; //按位与放大器; 2个子口罩
返回口罩;} 要测试我getMask()我也写的main()$ C $使用二进制()函数c,二进制()函数打印二进制甲酸给定数。
无效的二进制文件(无符号);诠释主(){
无符号num32bit = u;
无符号的面具= 0U;
无符号rsult32
INT I = 51;
屏蔽= getMask(27,17);
rsult32bit = num32bit |面具; //设置N等于m位1
的printf(“INT的\\ n大小为=%ld个位,而”
“无符号=%LD例如\\ n的大小”,的sizeof(INT)* BYTE,
的sizeof(无符号)* BYTE);
的printf(“DEC =%-4U,仓=”,21);
二进制(21);
的printf(“\\ n \\ n%S%d个\\ n \\ t”的,“num32bit =”,num32bit);
二进制(num32bit);
的printf(“面具\\ t”的);
二进制(掩模);
而(我 - )的printf(“ - ”);
的printf(“\\ n \\ t”的);
二进制(rsult32bit);
的printf(“\\ n”);
返回EXIT_SUCCESS;}无效的二进制文件(无符号DEC){
INT I = 0,
左= sizeof的(无符号)* BYTE
对于(I = 0;左> = 0; left--,我++){
的printf(“%d个”,!!(DEC或放大器;(1<<左)));
如果(!(第(i + 1)%4))的printf(“”);
的printf(“\\ n”);} 此测试code运行像(输出完全相同,因为我在上面的例子解释):
code的输出:-----------------$ GCC b.c:?$ ./a.out为int的大小= 32位,无符号= 32例如尺寸DEC = 21,仓= 00 00 num32bit =
00 01 掩模11 00 -------------------------------------------------- -
11 01 :?$ 另外,你可以写getMask()函数在较短的形式在两个语句,如下所示: 符号getMask(无符号N,
无符号M){
字节noOfBits = sizeof的(无符号)* BYTE;
返回((符号)?0 U>>(noOfBits
(?0U&所述;≤(noOfBits -m));}
注意:我删除多余的括号,清理的code。虽然你从来不需要想起运营商precedence,你可以使用覆盖precedence ()。但是,一个好的程序员总是裁判precedence表写工整code。 和更好的方法可能是写微距(),如下: 的#define BYTE 8#定义_NO_OF_BITS的sizeof(签名)* BYTE#定义MASK(N,M)(((符号)?0 U>>(_NO_OF_BITS
(?0U&所述;≤(_NO_OF_BITS
- 米))) 和调用,如:
rsult32bit = num32bit | MASK(27,17); 从n的所有零位设置为M 要设置所有位从n到m = 0,并且复位是不变的,你只需要补(? )面膜。
面具11 00 ?面具00 11 <
- 补 此外,而不是 | 操作员设置为零&安培; 是必需的。 记住和的工作原理是:
X'放大器; 0 = 0,并且X'放大器; 0 = 0 其中, X 值可以是1或0的。 由于我们已经有了一个位元补码?运营商,和&安培; 运营商。我们只是需要做的。结果 [解决]
rsult32bit = num32bit&安培; ?MASK(27,17); 和它的工作,如:
num32bit =
00 01 面具00 11 -------------------------------------------------- -
本文地址: &
扫一扫关注官方微信华中科技大学C语言实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
华中科技大学C语言实验报告
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩62页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢3.2写出下面程序的运行结果:#includei;return0;};16位环境(题意默认为16位环境):x1=-1,;y1=123..457,12;x1=,ffff,655;x2=-3,,ffffff;y1=123..457,12;3.3填入代码如下:(1)%c(2)%c
3.2 写出下面程序的运行结果: #include
int main(void) {
unsigned int x1 = 65535;
int x2 = -3;
float y1 = 123.4567, y2 = 123.4500;
printf(\ printf(\ printf(\ printf(\ printf(\return 0; } 16位环境(题意默认为16位环境): x1=-1,177777,ffff,6,177775,fffd,65533 y1=123.456700,
123.457,123.457,123.457
y2=123..2.45 x1(M)=-1 32位环境: x1=,ffff,65535 x2=-3,,fffffffd, y1=123.456700,
123.457,123.457,123.457
y2=123..2.45 x1(M)=65535
3.3 填入代码如下: (1) %c (2) %c (3) %f (4) %f (5) %lu (6) %hd (7) %d (8) %ld (9) %f (10) %Lf
3.4 根据变量说明指出下面的语句哪些是正确的,哪些是错误的。 char c='A'; int i1=1; const int i2=-1; long i3=3; unsigned i4=0; float x1=1; double x2=3; long double x3=1000; printf(\//ERROR:除数为零 /*
*/ putchar(c-'A'+'a'+1); /*
*/ printf(\ /*
*/ printf(\ /* (4) *///ERROR:输出long double类型的浮点数用%Lf printf(\ /*(5)*///ERROR:表达式值类型为long double,应用%Lf输出 scanf(\ /*(6)*///ERROR:x2类型为double,格式字符串中语句应为%lf printf(\ /*
*/ putchar(i2=getchar());/*
*///ERROR:cannot modify a const object printf(\/*(9)*//ERROR:第一个参数应用%u输出,第二个参数char类型用%f输出结果有误 scanf(\ /*(10)*/
3.5 编写一个程序,从终端输入一个字符,如果该字符时十六进制数字,则输出它对应的整数,否则输出它的字符码。
int main() {
c = getchar();
if( c>='0' && c<='9' )
printf(\ } else if(c>='A' && c<='F') { printf(\} else if(c>='a' && c<='f') { printf(\} else
printf(\return 0; }
3.6 从终端输入一个短整数,以字符形式输出该短整数的高字节和低字节。
#include #define N 0x00FF int main(void) {
char high,
scanf(\ high = (unsigned short)c>>8;
low = c&N;
printf(\ return 0; }
3.7 输入无符号短整数k,输出将k的高4位和低4位交换后的结果。
#include #define N 0x0FF0 int main(void) {
scanf(\ printf(\ return 0; }
3.8 编写一个程序,输入无符号短整数x, m, n(0<=m<=15, 1<=n<=m+1),取出x从第m位开始向右的n位(m对二进制位从右向左编号为0~15),并使其向左端(第15位)靠齐,输出处理后的结果。
int main() {
unsigned short x, m, n, temp = 0xFFFF;
printf(\ scanf(\ //x = (x & temp>>15-m & temp<<m+1-n)<<15-m; x=x<<15-m & temp<<16-n;
printf(\return 0; }
3.9 输入一个华氏温度F,将它转换成摄氏温度C后输出。转换公式为C=5/9(F-32)。要求按如下格式输出结果:假定输入的华氏温度为100,则输出为(保留两位小数): 100(F)=37.78(C)
#include int main(void) {
scanf(\ c = 5.0/9*(f-32);
printf(\ return 0; }
3.10 输入圆柱体的底面半径r和高h,计算并输出圆柱体的表面积和体积。
#include #define PI 3.1415926 int main(void) {
float r, h, s,
scanf(\ s = 2*PI*r*h + 2*PI*r*r;
v = PI*r*r*h;
printf(\ return 0; }
3.11 编程序以十六进制形式输出汉字“编”的区位码、国标码和机内码。
#include int main(void) {
unsigned short c='编',
char * r = &c;
d=(*(r+1))&0x00FF | (*r)<<8;
printf(\ return 0; }
#include int main(void) {
char * r = \中\ d=(*r)&0x00FF | (*(r+1))<<8;
} printf(\return 0; 三亿文库包含各类专业文献、行业资料、专业论文、应用写作文书、各类资格考试、外语学习资料、幼儿教育、小学教育、中学教育、第3章作业参考答案01等内容。 
 第三章作业-参考答案_语文_初中教育_教育专区。操作系统作业 3、在什么情况下需要使用作业控制块 JCB?其中包含了哪些内容? 答:为了管理和调度作业,在多道批处理...  第三章 作业参考答案一、单项选择 1、直接反映总体规模大小的统计指标是 ( A ) A、总量指标 B、相对指标 C、平均指标 D、变异指标 2、计算结构相对指标时,...  第三章作业参考答案_管理学_高等教育_教育专区。管理会计作业 第三章一、单项选择题 本-量-利分析 1.不是本量利关系基本公式的是( A )。 A.利润=单位贡献...  关键词:运筹学课后习题答案 同系列文档 第二章课后习题答案 第四章课后习题答案 第五章 课后习题答案 第五章课后习题 运筹学课后习题答案1...  习题参考答案 第三章水泥 习题参考答案一、填空题: 填空题: 1. 硅酸盐水泥 普通硅酸盐水泥 矿渣硅酸盐水泥 火山灰质硅酸盐水泥 水泥 复合硅酸盐水泥 2. 0%~...  第3章习题及答案(3-5)未_教育学_高等教育_教育专区。[3-1] 基本微分方程中没有包含水的密度,为什么说它表示了质量守恒定律? 答:首先,连续性方程: ? ???...  第2章作业参考答案 10页 2财富值 计算机控制系统习题参考答... 15页 10财富值 计算机组成原理_第四版课后... 56页 免费如要投诉违规内容,请到百度文库投诉中心...  第3章作业参考答案_计算机软件及应用_IT/计算机_专业资料。c语言与程序设计(曹计昌,卢萍,李开编著)课后答案 3.2 写出下面程序的运行结果: #include &stdio.h& ...很抱歉,该文档已经被删除了...先到其它地方遛一圈吧!
您可以在豆丁搜索您要找的内容
您可能感兴趣的文档
&2008- Inc. All Rights Reserved 豆丁网
扫描下载APP
扫描关注豆丁网
微信号:doudingwang
随时赢取精美礼品利用非负数的性质求出与的值,根据多项式为七次多项式求出的值;由题意只要求出点遇到点的时间,也就是点的运动时间,首先求出的距离,设相遇时间为,分别表示出两点行驶的距离,建立方程解决问题;把,,三点代入,利用公式法法求出答案即可.
解:,,,,多项式是七次三项式,则或,由图可知;,设经过秒点遇到点,则解得,点所走的路程为个单位长度,答:点所走的路程为个单位长度;把,,代入得,当时,最大值为.
考查了一元一次方程的应用,解题关键是要读懂题目的意思,根据题目给出的条件,找出合适的等量关系,列出方程,再求解;注意公式法求最大值的理解掌握.
3722@@3@@@@一元一次方程的应用@@@@@@246@@Math@@Junior@@$246@@2@@@@一元一次方程@@@@@@50@@Math@@Junior@@$50@@1@@@@方程与不等式@@@@@@7@@Math@@Junior@@$7@@0@@@@初中数学@@@@@@-1@@Math@@Junior@@$3625@@3@@@@非负数的性质:偶次方@@@@@@239@@Math@@Junior@@$239@@2@@@@有理数@@@@@@49@@Math@@Junior@@$49@@1@@@@数与式@@@@@@7@@Math@@Junior@@$7@@0@@@@初中数学@@@@@@-1@@Math@@Junior@@$3660@@3@@@@多项式@@@@@@242@@Math@@Junior@@$242@@2@@@@整式@@@@@@49@@Math@@Junior@@$49@@1@@@@数与式@@@@@@7@@Math@@Junior@@$7@@0@@@@初中数学@@@@@@-1@@Math@@Junior@@
@@50@@7##@@49@@7##@@49@@7
第三大题,第5小题
求解答 学习搜索引擎 | 点A,B,C在数轴上表示的数a,b,c满足:{{(b+2)}^{2}}+{{(c-24)}^{2}}=0,且多项式{{x}^{|a+3|}}{{y}^{2}}-a{{x}^{3}}y+x{{y}^{2}}-1是七次三项式.(1)则a的值为___,b的值为___,c的值为___;(2)若数轴上有三个动点M,N,P,分别从点A,B,C开始同时出发,在数轴上运动,速度分别为每秒1个单位长度,7个单位长度,3个单位长度,其中点P向左运动,点N先向左运动,遇到点M后再向右运动,遇到点P后又回头向左移动,...,这样直到点P遇到点M时三点都停止运动,求点N所走的路程;(3)点D为数轴上一点,它表示的数为x,求:\frac{49}{81}{{(3x-a)}^{2}}+(x-b)-\frac{1}{16}{{(-12x-c)}^{2}}+4的最大值,并回答这时x的值是多少?

我要回帖

更多关于 下标m开始的字符 的文章

 

随机推荐