matengfei
攻人之過勿太嚴,要思其堪受;教人以善勿過高,要令其可從。
級別: 論壇先鋒
|
把D0里的數據255進行取反之后怎么會是-256,而不是-65280。把D0以十六位二進制展開前八位是1,后八位是0,取反后前八位是1,后八位是0。這樣把后八位的數值加起來是65280,又最高位是符號位所以為-65280。不知哪里錯了,求高手指教。 |
---|---|
|
matengfei
攻人之過勿太嚴,要思其堪受;教人以善勿過高,要令其可從。
級別: 論壇先鋒
|
當最高位為1時,也就是負數。那么這個十六位二進制數所代表的數值:所有為0位的數值相加再加1,然后乘以-1,而并非所有為1的位所代表的數值相加再乘以-1。當所有位為0時,D0=0,當所有位為1時,D0=-1,而并非最高位和最低位為1其他位為0時,D0值為-1。詳見FX系列編程手冊。NEG求補指令的介紹。 |
---|---|
|
cvlsam
富士低壓,POD(觸摸屏),PLC專賣
級別: VIP會員
|
255的二進制表示方法為:0000 0000 1111 1111 執行了CML后,其值為 1111 1111 0000 0000 256的二進制表示方法為:0000 0001 0000 0000 負數,在PC中表示為其正數的補碼,也就是反碼+1 256的反碼為:1111 1110 1111 1111 那么補碼就是反碼+1,也就是1111 1111 0000 0000。 16位符號數據能表示的值域為-32768~+32767,那又怎么可能表達為-65280呢? Good Luck~ |
---|---|
|
matengfei
攻人之過勿太嚴,要思其堪受;教人以善勿過高,要令其可從。
級別: 論壇先鋒
|
如D0=2,則用十六位(0-15)二進制表示:0000 0000 0000 0010,也就是除第1位(從右向左分別為0-15位)為1,其他位0,取反后為1111 1111 1111 1101,這時除第1位為0外,其他位都為1。這時取反后的數值是多少呢?我們把上面的十六位二進制數為0的位所代表的數值相加然后再加1,得到結果等于3,最高位為1,是負數,所以D0取反后的數值等于-3。求補:我們把求反后的十六位二進制1111 1111 1111 1101加1得到:1111 1111 1111 1110,這時只有第0位為0,第0位代表的數值為1,1加1(計算它所代表的值)等于2。又因最高位為1,是負數,所以1111 1111 1111 1110的值為-2,即D0的補碼等于-2。像1111 1111 1111 1110這樣給出一個最高位為1的十六位二進制負數,能比較容易的計算它代表的值:所有為0位的位所代表的數值相加再加1然后乘以-1。 |
---|---|
|