c# 整数缓冲区溢出

nzk0hqpo  于 2023-01-28  发布在  C#
关注(0)|答案(4)|浏览(209)

我有一个非常基本的问题,假设我有两个变量(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' ?

谢谢

pxq42qpu

pxq42qpu1#

不,除非你正在用指针或强制类型转换做一些奇怪的事情。

puruo6ea

puruo6ea2#

我会说它不会,因为让我们说a开始于0x00和a=65535,当你添加一个你应该(总是)得到奇怪的行为在最好的(或分段错误)。我不是100%肯定,但我90%肯定左移不影响它旁边的内存。

zwghvu4y

zwghvu4y3#

答案是否定的。
ab是一个uint16_t,所以它是一个unsigned类型,并且unsigned溢出(或wrapp-around)在C中定义良好,它不会改变它旁边的内存。

u1ehiz5o

u1ehiz5o4#

不,一个设计正确的系统是不会发生这种情况的。另外,我还要指出你的数字表示法按照一般惯例是不正确的。0x通常用于表示十六进制数,包括在C语言中,但从你的问题的上下文来看,你在没有明显原因的情况下将它作为十进制基数的前缀。例如,0x31在十进制中等于49。而16+16不等于49。

相关问题