我有一个非常基本的问题,假设我有两个变量(uint16_t a,uint16_t b),在内存中,它们彼此对齐,如a=〉0x0 =〉0x15和b=〉0x16 to 0x31假设a = 0,B = 65535,
(1) if i increment b(b++), b will become 0 but will it affect 'a' 0th bit? (2) if i right shift b( b = b << 1), will it affect 'a' ?
谢谢
pxq42qpu1#
不,除非你正在用指针或强制类型转换做一些奇怪的事情。
puruo6ea2#
我会说它不会,因为让我们说a开始于0x00和a=65535,当你添加一个你应该(总是)得到奇怪的行为在最好的(或分段错误)。我不是100%肯定,但我90%肯定左移不影响它旁边的内存。
zwghvu4y3#
答案是否定的。a和b是一个uint16_t,所以它是一个unsigned类型,并且unsigned溢出(或wrapp-around)在C中定义良好,它不会改变它旁边的内存。
a
b
uint16_t
u1ehiz5o4#
不,一个设计正确的系统是不会发生这种情况的。另外,我还要指出你的数字表示法按照一般惯例是不正确的。0x通常用于表示十六进制数,包括在C语言中,但从你的问题的上下文来看,你在没有明显原因的情况下将它作为十进制基数的前缀。例如,0x31在十进制中等于49。而16+16不等于49。
4条答案
按热度按时间pxq42qpu1#
不,除非你正在用指针或强制类型转换做一些奇怪的事情。
puruo6ea2#
我会说它不会,因为让我们说a开始于0x00和a=65535,当你添加一个你应该(总是)得到奇怪的行为在最好的(或分段错误)。我不是100%肯定,但我90%肯定左移不影响它旁边的内存。
zwghvu4y3#
答案是否定的。
a
和b
是一个uint16_t
,所以它是一个unsigned类型,并且unsigned溢出(或wrapp-around)在C中定义良好,它不会改变它旁边的内存。u1ehiz5o4#
不,一个设计正确的系统是不会发生这种情况的。另外,我还要指出你的数字表示法按照一般惯例是不正确的。0x通常用于表示十六进制数,包括在C语言中,但从你的问题的上下文来看,你在没有明显原因的情况下将它作为十进制基数的前缀。例如,0x31在十进制中等于49。而16+16不等于49。