关于C语言位移的一个问题
int input
变成
unsigned int input
就是了。
你错误的情况,都是首位为1,系统认为是负数了
移位 -- 不是“位移”操作
n<<3,2进制,左移3位,就是 n=n*2*2*2, 就是n*8
0,1,2,3 -- 变 0,8,16,24
x >> 24 最高字节 移到最左, & 0xff 取出来。
x >> 16 第二 高字节 移到最左, & 0xff 取出来。
x >> 8 第3 高字节 移到最左, & 0xff 取出来。
x >> 0 不移动,& 0xff 取出来。
例如:
00111111 01010101 11111111 00000001
x >> 24 得 00000000 00000000 00000000 00111111
x >> 16 得 00000000 00000000 00111111 01010101
x >> 8 得 00000000 00111111 01010101 11111111
这里只有1个&表示按位进行与运算,比如value=10110 displaymask=10000
value&displayMask=10000 为真输出字符"1";然后左移1位value=01101 value&displayMask=00000 为假输出字符"0";继续这么下去,输出的就是10110 你可以自己试下去,这个是一种算法.因为displaymask的数值是第一位为1其他为0,所以每次进行&操作时只有value的最高位才能"与"出0或1,后面的肯定是0;一旦value的最高位是1结果就是10000为真,输出1;若是value的最高位0,value&displayMask的结果肯定是00000,非真,输出0,通过将value依次左移1位,它的各位数值就复现出来了...你要理解 ?A:B 的意思是"?"前面结果为真就进行A操作,否则进行B操作,value&displayMask这个的意思是按位与.
第6行: displaymask = 1000 0000 0000 0000 0000 0000 0000 0000
for循环依次用它与value各位相与
以上都没有问题
“无符号数value和displayMask使用&运算符,因为和0进行与操作的任何位结果都是0,则我不明白第12行语句是如何返回value的真实二进制数的. ”
先来看看相与:
1 & 1 = 1;
1 & 0 = 0;
0 & 0 = 0;
那么,显而易见12行的意思是如果value与displaymask的对应位为1则打印1,否则打印0
c语言位运算左位移问题。
不对吧,左移应该是整体向左边移动,如y=x<<2,就是x的左边去掉2位,后边补2个0,结果应该是:01001100
用c语言编写程序计算公式s=vt+1\/2at*t中,已知v=10.2,a=9.8,求任意时刻...
include <stdio.h> int main(){ float a=9.8,v0=10.2,t,s;scanf("%f",&t);s=v0*t+0.5*a*t*t;printf("%f\\n",s);return 0;}
C语言中“>>=,<<=,&=,^=,|=”分别表示什么意思?请举例说明
1、C语言中的 >>= 意思为:右移后赋值 代码示例为:x = 8; x >>= 3;右移后结果为:00000000 00000000 00000000 00000001 2、C语言中的 <<= 意思为:左移后赋值 代码示例为:x = 8;x <<= 3;左移后赋值结果为:00000000 00000000 00000000 01000000 3、C语言中的 &= 意思为:按位与...
求一篇通过初末速度以及位移计算加速度的c语言代码
设初速为v0,末速为ve,位移为s,加速度为a,代码举例如下:include <stdio.h>int main(int argc,char *argv[]){ double v0,ve,s,t; printf("Input v0, ve & s(R: v0>=0,ve, s>0)...\\n"); if(scanf("%lf%lf%lf",&v0,&ve,&s)!=3 || v0<0 || ve<=0...
c语言的问题,这个程序是把数组的0~p位移到后面。例如输入3,
\/\/只修改了void fun函数 include <stdio.h> define N 80 void score();void fun(int *w,int p,int n){ int a[N];int i;for(i=0;i<=p;i++)\/\/保存前p个数据在数组a中 { a[i]=w[i];} for(i=0;i<n-p-1;i++)\/\/将w后n-p个数据移动到w前p个数据中 { w[i...
c语言中逗号指的是什么意思?
C语言中的逗号有两种意思:1、表示"分隔号"的意思,就和语文中的逗号一个意思;2、表示"逗号运算符"的意思,用它将2个表达式连接起来.例如:3+5,6+8:就称为逗号表达式,又称为"顺序求值运算符"。逗号表达式的一般形式为表达式1,表达式2。逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个...
c语言表达式是什么?
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。字符串:C语言的字符串其实就是以'\\0'字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面...
WINDOWS下C语言-数值位移问题。
没问题。0x1F4 是 0x01F4 dwValue >> 8 右移8位 变 0x0001 再左移24位 变 0x1000000
“%s”是什么意思?
s在C语言中代表字符串型格式符。c和%s一般用在printf、sprintf等字符串格式化函数中,用于决定格式化参数的数据类型。如printf("%s", a)会将变量a作为字符串类型进行格式化。运算符号 比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补0)位移。例如,将11100011右...
C语言中“>>”是什么意思
是运算符号。比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。运算符的优先级从高到低大致是:单目...
尤海羟甲: 答:1.unsigned char的数据左移八位,那么低八位会变成02.c=(a这个问题的关键点在于C语言在计算的时候会进行强制类型转换,=右边的数据类型都会被强制转换成=左边的数据类型.换个问题,如果是b=(a希望回答能对于你学习c语言有帮助.
路北区13227765790: 关于C语言位移的一个问题 - ?
尤海羟甲: putchar(value&displayMask ? '1':'0'); 这里只有1个&表示按位进行与运算,比如value=10110 displaymask=10000 value&displayMask=10000 为真输出字符"1";然后左移1位value=01101 value&displayMask=00000 为假输出字符"0";继续...
路北区13227765790: 请教单片机c语言移位问题 - ?
尤海羟甲: CPU可以做到 逻辑左右移 补零 算术右移动 高位高位不变 循环右移 Cy补位 C语言里 >> 和
路北区13227765790: 求教:C语言关于移位的问题 - ?
尤海羟甲: ||是这样的吧1】源: ch=xx[i][j]; if(ch<<4<=32 || ch<<4>100) continue; else xx[i][j]+=ch<<4; 2】改:ch=xx[i][j]<<4; if(ch<=32 || ch>100) continue; else xx[i][j]+=ch; 有区别 先移位再赋值 和 先赋值再移位 对xx[i][j]产生的影响不同 2】 ch=xx[i][j]<<4; 先执...
路北区13227765790: C语言中什么叫位移? - ?
尤海羟甲: 给你一个例子: 左移运算 左移运算符“<<”是双目运算符.其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数, 高位丢弃,低位补0. 其值相当于乘2.例如: a<<4 指把a的各二进位向左移动4位.如a=00000011(十进制3),左移4位后为00110000(十进制48).
路北区13227765790: 关于c程序的移位问题 - ?
尤海羟甲: 移位比乘法和除法运算速度更快,CPU处理更简单.用十六进制,有时候更容易理解.比如位掩码,用0x10比用16要直观.
路北区13227765790: C语言的移位问题 - ?
尤海羟甲: 楼主你好!short是有符号数啊!有符号的右移,右移后填补0还是取决于符号位!因为你本来的符号位就是1,所以你右移4为后不是得0000 1100 1101 1011 而是1111 1100 1101 1011 ,最高位填补取决于符号位.因为符号是1,所以这里最高的4位都应该为1.楼主你认为的那种是对于无符号的数移动!希望我的回答对你有帮助!
路北区13227765790: 求助:C语言64位移位问题 - ?
尤海羟甲: 32位的芯片,位移操作的处理是这样的: 左移时移出的高位全部丢弃,低位全补0,所谓移出的高位是指超过32位,即4个字节后会丢弃; 右移时,移出的位数全部丢弃,对于无符号数,则高位补0;对于有符号数,则符号位补0还是1,不确定. 另外说一点,你的代码中8<<A这个表达式,意思是把8左移6位,而不是6左移8位.
路北区13227765790: C语言 位移符号问题 - ?
尤海羟甲: 跟LS的数据类型,以及正负都有关系 如果LS是正数,右移多少位,则在左边加上多少个0 如果是负烽,右移多少位,则在左边加上相应数量的1 比如:int a=8== 二进制的 1000 右移三位则是 0001 前面补3个0
路北区13227765790: C语言移位运算的问题,个人觉得比较难! - ?
尤海羟甲: 运算符优先级的问题,你把最后一句改成 temp = ((temp & 0xf0) >> 4) * 10 + (temp & 0xf); 就行了