Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
弄清楚这个按位AND和LSL在C中到底做了什么 1。长内温; 2.int乘积=-1; 3.temp=(长整型)产品&0xFFFFFFFF; 4.在第3行,出现以下情况:_C_Binary_Hex_Bitwise Operators_Bit Shift - Fatal编程技术网

弄清楚这个按位AND和LSL在C中到底做了什么 1。长内温; 2.int乘积=-1; 3.temp=(长整型)产品&0xFFFFFFFF; 4.在第3行,出现以下情况:

弄清楚这个按位AND和LSL在C中到底做了什么 1。长内温; 2.int乘积=-1; 3.temp=(长整型)产品&0xFFFFFFFF; 4.在第3行,出现以下情况:,c,binary,hex,bitwise-operators,bit-shift,C,Binary,Hex,Bitwise Operators,Bit Shift,由于类型转换运算符的值高于&运算符,因此程序首先将变量product中数字-1的32位表示形式转换为数字-1的临时64位表示形式。它通过高32位实现这一点。由于符号位的数字为1,因此上面的32位将用1填充,因此临时64位值现在由64个1组成。现在,该临时值与0xFFFFFFFF进行and运算,这将保持较低的32位不变,并将较高的32位置零。因此,现在临时值的值为0x00000000FFFFFF,它不再对应于-1,因为该值现在为正值,因为符号位(最高位)现在设置为零。此临时值的十进制值为42949

由于类型转换运算符的值高于
&
运算符,因此程序首先将变量
product
中数字-1的32位表示形式转换为数字-1的临时64位表示形式。它通过高32位实现这一点。由于符号位的数字为1,因此上面的32位将用1填充,因此临时64位值现在由64个1组成。现在,该临时值与0xFFFFFFFF进行and运算,这将保持较低的32位不变,并将较高的32位置零。因此,现在临时值的值为0x00000000FFFFFF,它不再对应于-1,因为该值现在为正值,因为符号位(最高位)现在设置为零。此临时值的十进制值为4294967295。它现在被分配给变量
temp

在第4行,发生以下情况:


变量temp中的值0x00000000FFFFFFFF现在左移32位,为0xFFFFFF00000000。此新值现在已指定给临时值。由于符号位(最高位)现在再次设置为1,因此该值为负值,但不再为-1。它的值现在是十进制的-4294967296。有关负数如何以二进制表示的更多信息,请参阅。

在第3行,出现以下情况:

由于类型转换运算符的值高于
&
运算符,因此程序首先将变量
product
中数字-1的32位表示形式转换为数字-1的临时64位表示形式。它通过高32位实现这一点。由于符号位的数字为1,因此上面的32位将用1填充,因此临时64位值现在由64个1组成。现在,该临时值与0xFFFFFFFF进行and运算,这将保持较低的32位不变,并将较高的32位置零。因此,现在临时值的值为0x00000000FFFFFF,它不再对应于-1,因为该值现在为正值,因为符号位(最高位)现在设置为零。此临时值的十进制值为4294967295。它现在被分配给变量
temp

在第4行,发生以下情况:


变量temp中的值0x00000000FFFFFFFF现在左移32位,为0xFFFFFF00000000。此新值现在已指定给临时值。由于符号位(最高位)现在再次设置为1,因此该值为负值,但不再为-1。它的值现在是十进制的-4294967296。有关负数在二进制中的表示方式的更多信息,请参阅。

第3行之后,
temp
的高32位应为0,低32位应为1。您可以通过使用
%016lx
格式说明符打印
temp
来确认。
long int
的最小大小为32位。为确保64位,请使用
long-long-int.
但假设64位,
int-product=-1
将符号扩展到64位,
0xffffffffffffff
并且您屏蔽了上面的32位,留下
0xFFFFFFFF
。将其左移32位,得到的
0xFFFFFFFF00000000
为十进制
-4294967296
。在第3行之后,
temp
的高32位应为0,低32位应为1。您可以通过使用
%016lx
格式说明符打印
temp
来确认。
long int
的最小大小为32位。为确保64位,请使用
long-long-int.
但假设64位,
int-product=-1
将符号扩展到64位,
0xffffffffffffff
并且您屏蔽了上面的32位,留下
0xFFFFFFFF
。将其左移32位,得到的
0xFFFFFFFF00000000
为十进制
-4294967296
1.  long int temp;
2.  int product = -1;

3.  temp = (long int)product & 0xFFFFFFFF;

4.  temp = temp << 32;