本文目录一览:
请问C语言是怎么计算负数取余的?
C语言计算负数取余:符号内的被除数决定,就是计算式中的-7,7,-7决定:比如-7%5=-2;
7%-5=2;
-7%-5=-2;
负数取余的原理:
任何一个整数n都可以表示成n=k*q+r其中0=|r||q|这里的r就是n除以q的余数,即r==n%q例如:-9=(-2)*4+(-1)则-9除以4的余数为-1。
求余:取整除后的余数。
求模:基本意义和求余相同,不过要求a%b中的b不是负数。
扩展资料
C语言除法运算符“/”和求余运算符“%”
除法运算符“/”。二元运算符,具有左结合性。参与运算的量均为整型时,结果为整型,舍去小数。如果运算量中有一个为实型,结果为双精度实型。
例如:
5/2=2,1/2=0
5/2.0=2.5
求余运算符“%”,二元运算符,具有左结合性。参与运算的量均为整型。求余运算的结果等于两个数相除后的余数。
c语言中负数除法和右移的区别
对于无符号整数,除法和右移效果是一样的;
对于有符号的正整数,除法和右移的效果也是一样的;
对于有符号的负整数,除法和右移的效果是不一样的;
比如:-3/2 = -1;-31是多少呢?
我们可以将其按照8位二进制展开-3的8位二进制是1000 0011,负数在计算机中是以补码的形式存储的,所以还需要将其转换成补码1000 0011
转换成反码 1111 1100(最高位符号位不动), 再加1转换成补码1111 1101
接着将其右移1位,由于是有符号负整数,所以最高位补1,变为1111 1110
接着将其还原成原码,1111 1110减1变反码1111 1101,接着反码取反变原码1000 0010,转换成十进制是-2,
也就是说-31得到的是-2
其实这是因为 除法是向0取整,而右移位是向负取整
-3/2=-1.5=-1(向0取整),-31=-1.5=-2(向负取整);
如果我们需要右移达到的效果和除法一样,可以采取下列公式:
假设除数为2^N,负数x的除法可以用以下方法来代替:(x + 2^N - 1) N
本文来自 西门一雪 的CSDN 博客 ,全文地址请点击:
C语言 带有负数的除法运算
-30/8是整型除法,结果为整型,而你用%f占位符输出整型,这是不正确的。如果要用%f,必须输出一个float型或double型。改为(double)-30/8。
C语言问题,正数除负数结果是正还是负的?
这和C语言中数据的储存有关.C语言中数据的储存空间是有限的,比如说整型数据,占四个字节,从而整型数是有范围的,从-2^31+1到2^31,正负号根据二进制数第一位决定.并且运算是以二进制来进行的,当两个数加和超出范围时,自动舍去超出的位数(二进制),所以当然可能两个很大的正数相加等于负数咯.
c语言中,正数除负数是正数还是负数
分子分母的符号如果不同,除出来一定是负数因为:
A/B假设A是负数B是正数=(-1)*|A|/B,而|A|/B是正数除以正数,得到正数,乘以-1得到负数,同理如果B是负数