我对结果的大小有点困惑。
我有这个:
unsigned long part1 = 0x0200000001;
cout << sizeof(part1); // this gives 8 byte
如果我算的正确,第1部分是9字节长吗?
任何人都可以为我澄清这个
感谢 此致
答案 0 :(得分:0)
如果我算的正确,第1部分是9字节长吗?
不,你数不正确。 0x0200000001
可以容纳五个字节。一个字节由两个十六进制数字表示。因此,字节为02 00 00 00 01
。
答案 1 :(得分:0)
我想你误解了sizeof(type)
的含义。 sizeof(int)
返回系统保留的字节数相应类型的任何值。因此,32位系统上的4
可能会在64位系统上提供8
字节和sizeof(char[20])
字节,20
会提供int x; sizeof(x)
,依此类推。
注意,也可以使用(类型)变量的标识符,例如type
;然后从变量声明/定义推导出sizeof(x)
,以便在这种情况下sizeof(int)
与sizeof
相同。
但是:sizeof
永远不会在运行时解释或分析变量的内容/值,即使char *x = "Hello, world"; sizeof(x)
听起来好像也是如此。因此,"Hello, world"
不字符串文字char*
的字符串长度,但类型sizeof(part1)
的大小。
因此,sizeof(long)
与8
相同,无论part1
的实际内容在运行时是什么,系统if ( $_POST['columns'][$i]['data'] != 'TimeOccurred.date.' ) {
if ( $sWhere == "" ) {
$sWhere = "WHERE ";
}
else {
$sWhere .= " AND ";
}
$sWhere .= $aColumns[$i]." LIKE '%".addslashes($_POST['columns'][$i]['search']['value'])."%' ";
}
都是 let activityItem = URL.init(fileURLWithPath: Bundle.main.path(forResource: "fileName", ofType: "mp3")!)
let activityVC = UIActivityViewController(activityItems: [activityItem],applicationActivities: nil)
activityVC.popoverPresentationController?.sourceView = self.view
self.present(activityVC, animated: true, completion: nil)
。
答案 2 :(得分:0)
sar -n DEV 1 60 | grep lo > sar.log &
的最小范围为unsigned long
0 to 4294967295
。
将4 bytes
分配给不够大的0x0200000001 (8589934593)
会触发转化,使其适合您机器上的unsigned long
。此转换是实现定义的,但通常会丢弃较高的位。
unsigned long
将告诉您类型使用的字节数。它不会告诉你你的值占用了多少字节。
答案 3 :(得分:0)
sizeof(part1)
(我假设你有拼写错误)给出unsigned long
的大小(即sizeof(unsigned long)
)。因此part1
的大小无论存储在哪个值都是相同的。
在您的编译器上,sizeof(unsigned long)
的值为8
。类型的大小是为所有类型(定义为char
的{{1}}类型除外)定义的实现,因此编译器之间可能会有所不同。
您期望的1
值是通过将9
的值写入文件或字符串作为人类可读的十六进制而没有前导零或前缀来获得的输出大小。这与part1
运营商没有任何关系。并且,在输出值时,可以以不同的方式对其进行格式化(例如,十六进制与十进制对十进制,八进制,前导零或不一致),这会影响输出的大小
答案 4 :(得分:-1)
sizeof(part1)
返回变量part1
的数据类型的大小,您已将其定义为unsigned long
。
编译器的unsigned long
的位大小总是64位,或8字节长,即8位8位组。十六进制表示是二进制格式的人类可读形式,其中每个数字是4位长。 为了清晰起见,我们人类经常省略前导零,计算机从不这样做。
让我们考虑一个字节的数据 - char
- 并且值为零。
- decimal: 0
- hexadecimal : 0x0 (often written as 0x00)
- binary: 0000 0000
有关C ++数据类型及其相应位大小的列表,请查看文档(msvc文档更易于阅读):
对于msvc:https://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.71).aspx
for gcc:https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Data-Types
所有编译器都有其数据大小的文档,因为它们依赖于硬件和编译器本身。如果你使用不同的编译器,谷歌搜索&#34;&#39;你的编译器名称&#39;数据大小&#34;将帮助您找到适合您的编译器的正确尺寸。