一笔长空 发表于 2024-4-12 22:59:38

数据使用右移运算符出错

本帖最后由 一笔长空 于 2024-4-12 23:08 编辑



代码如下。IDKEY这个数组是unsigned char类型,要对0XDF这个数据进行运算,<<2*3/2都没有问题运算完之后是0x3A;0011 1010,但进行右移一位后变成了1001 1101;
这就奇怪了,右移运算符不是高位补0吗,现在怎么成补1了,我没用循环右移啊,请教老师解答,感谢!

jwd 发表于 2024-4-13 06:10:03

是这个1过去了,你可以右移前强制类型转换一下

kaily 发表于 2024-4-13 11:27:05

keil的常数在没有强制指定类型前默认都是int类型,所以会产生你上面的结果
如果想当作unsigned char类型操作,则需要进行强制类型转换
x = (unsigned char)(((0xdf << 2) * 3) / 2) >> 1;

一笔长空 发表于 2024-4-13 11:45:59

kaily 发表于 2024-4-13 11:27
keil的常数在没有强制指定类型前默认都是int类型,所以会产生你上面的结果
如果想当作unsigned char类型操 ...

明白了,非常感谢您的解答,

一笔长空 发表于 2024-4-13 11:47:21

本帖最后由 一笔长空 于 2024-4-13 11:48 编辑

jwd 发表于 2024-4-13 06:10
是这个1过去了,你可以右移前强制类型转换一下
感谢您的解答,学习了,另外您这个计算器是在哪里下载或者打开,看着还挺好用,Windows自带的不太好

xxxevery 发表于 2024-4-13 11:52:54

楼上说的好,c语言的细节应用我们还需要多学习啊

jwd 发表于 2024-4-13 13:20:07

一笔长空 发表于 2024-4-13 11:47
感谢您的解答,学习了,另外您这个计算器是在哪里下载或者打开,看着还挺好用,Windows自带的不太好 ...

这就是win10(11)自带的计算器啊

一笔长空 发表于 2024-4-13 13:40:02

jwd 发表于 2024-4-13 13:20
这就是win10(11)自带的计算器啊

好的我的是win7,再次感谢您的解答,又学习到了新知识,非常感谢

lezjin 发表于 2024-4-13 13:44:57

C语言的类型转换挺复杂的

一笔长空 发表于 2024-4-13 13:49:25

lezjin 发表于 2024-4-13 13:44
C语言的类型转换挺复杂的

我这回又学习到了
页: [1]
查看完整版本: 数据使用右移运算符出错