C语言字符移位过程

来源:互联网 发布:程序员历年真题 编辑:程序博客网 时间:2024/05/24 03:50
如果位移动的数目大于或等于它本身存储位数,即对一个char型变量进行大于或等于8次的左移或右移操作,若原变量是正数,则结果必为0;若原变量是负数,则其结果必为-1。(前提是移位后还赋值给char型变量)
今天无意中发现一个问题,一个char型的数据经过左移8位后若直接赋值给一个short或者int类型的话会自动保存左移后的正常值,而赋值给char型的话就是0x00。
char Dat = 0XFF;
short NUM = 0X0000;
NUM = Dat << 8;//NUM = 0XFF00
Dat <<= 8;//Dat = 0x00;
如果NUM为int型数据,则Dat << 24 后NUM的值为0XFF000000,如果左移25位NUM的值就是0XFE000000。
运算过程中CPU会将char型的数据放到寄存器中,因为CPU是32为的所以数据在寄存器中移位的范围也是32位,运算后赋值给左值时会根据左值的字长进行数据的截取
原创粉丝点击