有人可以解释一下:"当目的地是某种形式的无符号整数并且赋值是一个整数时,会忽略使该值太大的额外位。"我没有得到什么"目的地类型"和指定值均值。
答案 0 :(得分:1)
"目的地"是指分配给变量的变量,即分配的左侧,而分配的值是#34;表示分配给变量的值,即右侧。
例如:
unsigned int destination = assigned_value;
当指定的值超出目标范围时会发生什么情况,C standard关于有符号和无符号整数转换的第6.3.1.3节说明如下:
1 当整数类型的值转换为_Bool以外的另一个整数类型时,如果该值可以由new表示 类型,它没有变化。
2 否则,如果新类型是无符号的,则通过重复加或减一个最大值来转换该值 可以用新类型表示,直到值在 新类型的范围。
这实际上意味着该值以目标可以容纳的最大值加1转换。换句话说,额外的位被剥离。
答案 1 :(得分:0)
一个例子:
#!/usr/bin/env python
import os
import sys
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
在int assign = -2;
unsigned int dest = 2;
dest = assign ;
指令中,dest = assign
是dest
类型的目的地,unsigned int
是指定类型assign
的值。
请小心这样做,因为程序结束时32位架构上的int
。
答案 2 :(得分:0)
我认为这句话应该是这样的:
unsigned int destination = 258;
\----------/ \-/
destination type assigned value
二进制258是
1.0000.0010 (requires 9 bits)
但是无符号字符可以(通常)仅保持8位,因此仅使用最右边的8位,并忽略剩余的“额外”位。因此,unsigned char的二进制模式变为:
0000.0010
这是十进制值2。