【发布时间】:2015-01-09 15:39:04
【问题描述】:
我最近在学习C,有些东西我看不懂。
这是一个例子,
int a = -1;
unsigned int b = a;
在这个例子中,书中说,
"a is auto-casted to 'unsigned int' and then assigned to 'unsigned int b'."
但是……为什么?我是说
'int a'是-1,所以它的位串应该是
1111 1111 1111 1111 1111 1111 1111 1111
从计算机的角度来看,它所要做的就是将位复制到 unsigned int b
无需将 'signed int' 转换为 'unsigned int' !
我不明白,为什么他们在复制位之前自动将 'signed int' 转换为 'unsigned int'?
【问题讨论】:
-
好吧,考虑一下您的代码会发生什么。
-1是无符号变量的不可能值。那么如果你分配了一个不可能的值应该怎么办? -
b是unsigned int并且您将这些位从a复制到它。这些位实际上没有任何变化,只是将它们作为无符号值而不是有符号来处理的方式,最高位不再是符号位,而是数字的一部分。 -
当您进行有符号/无符号转换时,存储在内存中的位模式实际上并没有改变。只是解释不同而已。
-
位不会改变,改变的是类型改变时读取位的方式。
-
请问这是什么书?那是直接引用吗?
标签: c casting int bit unsigned