c语言 负数运算 请高手帮忙解释下
作者&投稿:耿码 (若有异议请与网页底部的电邮联系)
这个结果是 10 6
如果是 k=(i++)+(++i)+(i++); 这样写 结果是 12 6
因为 ++ 在右侧时,变量先参与运算再增1,在左侧时,变量先增1再参与运算。
k = (i++)+(++i)+(i++) 系统是这么算的。
先计算 (i++)+(++i) ,第一个i++,取i参与运算,再取另一个加数,
i++,时,先增1再参与运算,i变成了 4
k= i + i = 4 + 4 =8
再取+(i++)参与运算再增1 8+4 =12
可以的~
直接相加就行了。。。、
#include
void main() {
int a, b ;
int c ;
printf("输入两个数:(可以是负数)") ;
scanf("%d%d",&a,&b) ;
c = a+b ;
printf("c = %d", c) ;
}
5*-3=-15
-5*-3=15
这三个不解释了吧。
-5/3=-1
5/-3=-1
-5/-3=1
这三个你这么理解,5/3=1,然后负负为正,正负为负,计算机的运算过程差不多也是这样。
-5%3=-2
5%-3=2
-5%-3=-2
这三个也是那么理解的,首先不管符号,然后5%3=2,然后负负为正,正负为负。。。
-5&3=3
5&-3=5
-5&-3=-7
这个是按位与,-5二进制是10000101,负数在计算机中是以补码保存的,补码是11111011,3是00000011,正数不用存补码,还是原码,按位与之后就是00000011,就是3。
5和-3按这个算法,5原码是00000101,-3原码是10000011,补码是11111101,按位与,00000101,就是5。
-5和-3,都是补码,-5补码是11111011,-3补码是11111101,按位与,结果是11111001,这里要注意了,这个数的符号位为1,所以这是一个补码,要翻译一下,除符号位不变外,其他位减1取反,结果是10000111,就是-7。
-5<<3=-40
5<<-3=-1610612736
-5<<-3=1610612736
移位,第一个还好说,-5的补码是11111011,左移3位,左移的过程后边是要补两个数的符号位的与运算的,结果就是11011000,这个数是一个负数,需要转换一次,除符号位外-1取反,就是10101000,就是-40。
第二个和第三个比较麻烦,我以上给你说的都是按照8位的存储说的,其实计算机真正是按照32位存储的,也就是传说中的32位系统,未来还会有64位系统这一说法,那一个数字就是64位了,好了,现在咱们看32位的情况。5的实际存储为32位的00000000000000000000000000000101,之前不提另外的0因为不影响运算结果,现在影响了,就加上。左移-3位,就是右移3位,前边补1,也就是两数的符号位求异或的结果,异或说白了还是负负为正,正负为负,这里补的就是1,结果就是11100000000000000000000000000000,这个数就是-1610612736。
坚昌六味: int 是有符号基本整型, for(n=2;n<=16;n=n+2) m=m*(n+1)*(n+2);你的m的初步估计是3的8次方4的8次方乘以2 144194然后肯定是超出界限了.. int是2个字节..也就是16位,第一位是数据的正负0正1负,15位是数值最大的值是32767 超出了...然后你最后结果的反正是超出范围了.,.最终是哪里超出的就不一定是最后了...当你m还在循环的时候就超出了..
浙江省17722386611: C语言中负数位运算规则是怎样的 - ?
坚昌六味: 跟正数一样,但有一个不同,就是右移运算,负数右移高位补1,正数右移高位补0
浙江省17722386611: c语言关系运算中负数是按0还是按1 - ?
坚昌六味: 0001 取反 1110 符号位为1,取反+1为 1010 转化成10进制为 -2 正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位加1 反码是:符号位为1,其余各位求反,但末位不加1 也就是说,反码末位加上1...
浙江省17722386611: 单片机C语言中的负数怎么操作 - ?
坚昌六味: 负数和正数一样参与加减乘除运算,不同之处显示时前面多一个负号, 用sprint函数将其转化为字符串,即可进行显示 对于整数,还有一种方法,先判断是是否大于等于0,如果小于0,则取反,可以和正数一样分离个 十 百 千 万,然后显示,前面加一负号即可
浙江省17722386611: C语言负数求余,求详解原理是什么 - ?
坚昌六味: 取余的函数定义 a%b = a - (a/b)*b所以例如-7%5 = -7 - (-1)*5 = -2
浙江省17722386611: c语言中如何利用scanf输入负数 - ?
坚昌六味: C语言中用scanf()输入负数和输入整数是一样的,举个例子int a;scanf(&a);把输入的数存入变量a中 , 这个int就是有符号整形数,既可以是负数也可以是正数, 如果你定义成unsigned int a ;那么就只能输入正数了,因为是无符号的也就是范围是大于等于0的.
浙江省17722386611: C语言中x y中有一个为负数 表达式怎样表达 - ?
坚昌六味: 如果x或y中至少有一个负数,可以写: x<0||y<0 如果x或y中只有一个是负数,则麻烦一点,可以这样写: x<0&&y>=0||y<0&&x>=0 有什么问题请留言.
浙江省17722386611: C语言中负数怎样进行位运算 - ?
坚昌六味: & 与运算 0 &1=0 1&1=1 0&0=0 | 或运算 0|1=1 0|0=0 1|1=1^ 异或运算 0^1=1 0^0=0 1^1=0对其整数原码
浙江省17722386611: c语言带有负数的求模运算 - ?
坚昌六味: #include <stdio.h> #include <math.h> int main(void) {int number = -1234;printf("number: %d absolute value: %d\n", number, abs(number));return 0; }
浙江省17722386611: C语言 从键盘输入若干个学生成绩,输入负数表示输入结束,输出平均成绩和低于平均成绩的学生成绩. - ?
坚昌六味: 修改后如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24#include<stdio.h> voidmain() { inti=0,a[100],j;floatsum=0.0,aver;do{printf("请输入第%d个学生成绩:\n",i+1);scanf("%d",&a[i]);if(a[i] >= 0)//如果成绩大...