C语言除法运算问题
比如(-2)/2,在short int 中,-2是65534,如果对65534除以2,就跳到正数的区域了。,但实际的运算结果是-1,应该是65535。C语言在除法运算中,我们需要手动把负数转换成正数,计算完再转换回负数吗? short int 数据范围是 -32768~~32767 ,没有65534 要是那样的话就太不智能了嘛,你想多了应该是,还不如用汇编:) 20061002838 发表于 2019-5-22 16:51short int 数据范围是 -32768~~32767 ,没有65534
short int的-2和unsigned short int的65534在内存里应该是同一个值吧,把他们两个都去除以2,能得出不同的结果吗 皮尔斯 发表于 2019-5-22 16:59
short int的-2和unsigned short int的65534在内存里应该是同一个值吧,把他们两个都去除以2,能得出不同 ...
必须不同。这个问题您自己查一下反汇编就知道了,编译器怎么可能那么傻 你如果是常数直接除,应该是按照int来算的所以不会有疑问,如果是变量,编译器根据变量类型来除的,结果当然是不同的 {:lol:}是这样啊,在编译器反汇编的时候就会解决这个问题吗 takashiki 发表于 2019-5-22 17:07
必须不同。这个问题您自己查一下反汇编就知道了,编译器怎么可能那么傻 ...
{:lol:} 是这样啊,编译器在反汇编的时候就会解决这个问题吗 符号型计算,编译器自动处理。 皮尔斯 发表于 2019-5-22 16:59
short int的-2和unsigned short int的65534在内存里应该是同一个值吧,把他们两个都去除以2,能得出不同 ...
如果要得到一样的结果,那汇编指令何必设计成SDIV和UDIV两种,16位数扩展成32位何必要分成有符号扩展和无符号扩展 20061002838 发表于 2019-5-22 17:09
如果要得到一样的结果,那汇编指令何必设计成SDIV和UDIV两种,16位数扩展成32位何必要分成有符号扩展和无 ...
有道理{:lol:} 写几行代码测试一下,比发帖问快多了。{:lol:} su33691 发表于 2019-5-22 17:13
写几行代码测试一下,比发帖问快多了。
我一开始是想运算的问题会不会跟硬件有关系,有的硬件会自动识别正负,有的硬件比较低级就不会。没想到这一步是编译器做的
页:
[1]