c语言中为什么左移不分符号数无符号数,而右移分呢?
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/11 01:56:21
c语言中为什么左移不分符号数无符号数,而右移分呢?
就是如果无符号数高位补0,有符号数补符号数,
为什么呢
就是如果无符号数高位补0,有符号数补符号数,
为什么呢
因为在C语言标准中,只规定了无符号数的移位操作是采用逻辑移位(即左移、右移都是使用的逻辑左移和逻辑右移).
而对于有符号数,其左移操作还是逻辑左移,但右移操作是采用逻辑右移还是算术右移就取决于机器了!(算术右移和逻辑右移的区别是:算术右移不右移符号位,即最高位,右移后前补0还是1取决于符号位的值;逻辑右移执行时将移动符号位,右移后前补0)
因此,一个程序如果使用了有符号数的右移位操作,它就是不可移植的了.
再问: 那为什么要这样规定呢,我是说于有符号数,其左移操作还是逻辑左移,为什么右移又要分情况了呢??
而对于有符号数,其左移操作还是逻辑左移,但右移操作是采用逻辑右移还是算术右移就取决于机器了!(算术右移和逻辑右移的区别是:算术右移不右移符号位,即最高位,右移后前补0还是1取决于符号位的值;逻辑右移执行时将移动符号位,右移后前补0)
因此,一个程序如果使用了有符号数的右移位操作,它就是不可移植的了.
再问: 那为什么要这样规定呢,我是说于有符号数,其左移操作还是逻辑左移,为什么右移又要分情况了呢??
c语言中为什么左移不分符号数无符号数,而右移分呢?
C语言中无符号数和有符号数进行运算时会转换为无符号还是有符号?
C语言中 有符号和无符号的数相加 怎么算?
C语言中无符号数的右移 高位应该补0还是补1?
C语言32位有符号数和无符号数之间怎么强制转换
c语言题目:下列各无符号十进制数中,能用八进制表示的是.
如图:C语言程序中无符号数a的值是负数,为什么作整形输出时的结果是64870?
C语言中有无符号实型数吗
C语言中为什么不能将无符号整数与有符号整数比较
C语言中有符号和无符号是什么意思解释一下
为何逻辑左移相当无符号数乘以2操作?能举个具体例子吗?
C语言 将这个负数赋给无符号数的过程!